繁体   English   中英

Python Regex用标点符号删除数字和数字

[英]Python Regex remove numbers and numbers with punctaution

我有以下字符串

 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)

但它并没有实现我希望的目标。

谁能指出我正确的方向?

您可以使用:

>>> 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用于单词边界。

如果您对regex的要求不完全严格,可以使用itertools.dropwhile ,这是一种非regex的方法:

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

我认为这是您想要的:

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

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

正如@godaygo 所说 ,您可以使用以下代码:

line = line.split()[-1]

该字符串将在空格处分割,然后选择最后一个子字符串。

如果要访问所有部分(假设总是有三个部分),则可以改用以下方法:

num1, num2, url = line.split()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM