Python正则表达式使用punctaution删除数字和数字

时间:2016-09-19 22:09:22

标签: python regex

我有以下字符串

 line = "1234567 7852853427.111 https://en.wikipedia.org/wiki/Dictionary_(disambiguation)"

我想使用常规表达式删除数字1234567 7852853427.111

我有这个

nline = re.sub("^\d+\s|\s\d+\s|\s\d\w\d|\s\d+$", " ", line)

但它没有做我希望它会做的事情。

有人能指出我正确的方向吗?

4 个答案:

答案 0 :(得分:3)

您可以使用:

>>> 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+将匹配整数或十进制数字,后跟一个或多个空格。 \b用于字边界。

答案 1 :(得分:1)

如果你的正则表达式要求不完全严格,那么这是一种非正则表达式方法,使用itertools.dropwhile

>>> ''.join(dropwhile(lambda x: not x.isalpha(), line))
'https://en.wikipedia.org/wiki/Dictionary_(disambiguation)'

答案 2 :(得分:0)

我认为这就是你想要的:

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

答案 3 :(得分:0)

虽然您要求使用正则表达式,但更好的解决方案是使用str.split,假设您的字符串始终采用{number} {number} {hyperlink}格式。

作为@godaygo said,你可以使用:

line = line.split()[-1]

字符串将在空格上拆分,我们选择最后一个子字符串。

如果你想访问所有部分(假设总有三个部分),你可以改用它:

num1, num2, url = line.split()