【发布时间】:2021-12-19 05:35:35
【问题描述】:
我想删除数字和后面的字符串直到句子结束,但不是句子开头的数字。
例如。从“1903type18pieces”中删除“18pieces”,而不是整个“1903type18pieces”,正确的代码可能类似于:
re.sub("(?<!\d+)\d.+?$", "", string)
但想不通
【问题讨论】:
标签: regex python-2.7
我想删除数字和后面的字符串直到句子结束,但不是句子开头的数字。
例如。从“1903type18pieces”中删除“18pieces”,而不是整个“1903type18pieces”,正确的代码可能类似于:
re.sub("(?<!\d+)\d.+?$", "", string)
但想不通
【问题讨论】:
标签: regex python-2.7
嗯,当然你可以...
import re;
print(re.sub("18pieces", "", "1903type18pieces"));
但这很傻,正常替换就可以了。
您尝试重新提出您的问题怎么样?
【讨论】:
关于您尝试的模式的一些说明:
Python re 不支持像(?<!\d+) 这样的后向断言中的量词。
但是像这样,模式仍然会匹配它在字符串中遇到的第一个数字,因为后向断言不应该在左边有数字,这在字符串的开头也是如此。
在这部分.+?$ 你可以省略 ?以防止回溯,因为该部分将匹配到字符串的末尾。此处使用+ 表示字符串至少应包含2 个字符
您可以使用正向回溯断言左侧有一个数字或空白字符以外的字符,然后将一个数字与该行的其余部分匹配。
(?<=[^\s\d])\d.*
import re
text = "1903type18pieces"
print (re.sub("(?<=[^\s\d])\d.*", "", text))
输出
1903type
如果也可以直接在左侧声明换行符或空格,则可以使用:
re.sub(r"(?<=\D)\d.*", "", text)
【讨论】:
re.sub(r"(?<=\D)\d.*", "", text)(我不会使用string作为变量,因为它是Python中的一个单独模块)。
re.M 是多余的,问题中的字符串是单行的。