2017-02-15 108 views
1

我需要来标记与此字符串,例如文本:"hello 502world a0.0.3b .1.4 <sub>5</sub>"如何把字符串中的所有数字字符串“NUM”在Python

我希望把它转化为:"hello NUMworld aNUMb NUM <sub>5</sub>"

注意除了502之外,0.0.3和.1.4也变成了NUM,也变成了NUM,但是在子里面我想保持这个数字相同。

文本具有非ASCII字符在它

公告再次,如果数字是子 之间,所以应该留号码。

这是一个示例文本是从here

+1

你是不是真正的 “标化”,它,因为输出不是令牌列表,它只是一个修改过的字符串。所以...只是使用正则表达式来修改字符串。如果你想标记,我的答案可能会有所不同。 – RobertB

+0

我已经给每件事情都付出了努力,但我需要多过滤一下 – Yonlif

回答

2

使用re.sub功能的解决方案:

import re 

s = "hello 502world a0.0.3b .1.4 <sub>5</sub>" 
replaced = re.sub(r'(NUM){2,}', 'NUM', re.sub(r'(?<!<sub>)\.?\d+', 'NUM', s)) 

print(replaced) 

输出:

hello NUMworld aNUMb NUM <sub>5</sub> 
+0

OP已经改变了忽略“sub”标签内数字的请求。使正则表达式更难一些。 – RobertB

+0

@RobertB,好吧,我已经更新了我的答案 – RomanPerekhrest

1

一个简单的正则表达式会做的伎俩:

re.sub(r'(\.?\d+)+', 'NUM', "hello 502world a0.0.3b .1.4") 
#'hello NUMworld aNUMb NUM' 
+0

由于多数民众赞成在工作 也TY为编辑 – Yonlif

+0

恨是一个坏消息,但我需要保存号码是他在 – Yonlif

+0

我不明白您的评论。至少不是它的第二部分。 – DyZ

相关问题