我有以下字符串
line = "1234567 7852853427.111 https://en.wikipedia.org/wiki/Dictionary_(disambiguation)"
我想用正则表达式去掉数字1234567 7852853427.111
我有这个re
nline = re.sub("^\d+\s|\s\d+\s|\s\d\w\d|\s\d+$", " ", line)
但它并没有做我希望它做的事情。
谁能给我指个方向?
发布于 2016-09-20 06:12:51
您可以使用:
>>> line = "1234567 7852853427.111 https://en.wikipedia.org/wiki/Dictionary_(disambiguation)"
>>> print re.sub(r'\b\d+(?:\.\d+)?\s+', '', line)
https://en.wikipedia.org/wiki/Dictionary_(disambiguation)
正则表达式\b\d+(?:\.\d+)?\s+
将匹配后面跟着1个或多个空格的整数或十进制数字。\b
代表单词边界。
发布于 2016-09-20 06:18:30
如果您的正则表达式要求不是完全严格,这里有一个非正则表达式方法,使用itertools.dropwhile
>>> ''.join(dropwhile(lambda x: not x.isalpha(), line))
'https://en.wikipedia.org/wiki/Dictionary_(disambiguation)'
发布于 2016-09-20 06:29:47
我想这就是你想要的:
nline = re.sub("\d+\s\d+\.\d+", "", line)
它从行中删除数字。如果你想保留"http...“前面的空格你的第二个参数当然应该是“”。
如果您还想记录单个数字字符串,您可以将它们放在如下所示的组中:
>>> result = re.search("(\d+)\s(\d+\.\d+)", line)
>>> print(result.group(0))
1234567 7852853427.111
>>> print(result.group(1))
1234567
>>> print(result.group(2))
7852853427.111
学习和练习正则表达式的一个很好的方法是regex101。
https://stackoverflow.com/questions/39582859
复制相似问题