Python 无法理解删除带有数字的单词的代码
我想删除带有数字的单词。经过研究,我明白了这一点Python 无法理解删除带有数字的单词的代码,python,regex,python-3.x,Python,Regex,Python 3.x,我想删除带有数字的单词。经过研究,我明白了这一点 s = "ABCD abcd AB55 55CD A55D 5555" >>> re.sub("\S*\d\S*", "", s).strip() 这段代码可以解决我的问题 然而,我无法理解这段代码是如何工作的。我知道regex,并且我知道\d可以识别所有数字[0-9]\S代表空白。和*是图案左侧的0个或多个引用 "\S*\d\S*" 这部分我不能理解 但我不确定我是否理解这段代码是如何识别AB55的 谁能给我解释一下吗?
s = "ABCD abcd AB55 55CD A55D 5555"
>>> re.sub("\S*\d\S*", "", s).strip()
这段代码可以解决我的问题
然而,我无法理解这段代码是如何工作的。我知道regex,并且我知道\d可以识别所有数字[0-9]\S代表空白。和*是图案左侧的0个或多个引用
"\S*\d\S*"
这部分我不能理解
但我不确定我是否理解这段代码是如何识别AB55的
谁能给我解释一下吗?谢谢这将用空字符串“”替换数字周围的任何非空格符号 AB55被视为:
AB是\S*,5是\d,5是\S
*
55CD:空字符串是\S*,5是\d,5CD是\S*
A55D:A是\S*,5是\d,5D是\S*
5555:空字符串是\S*,5是\d,555是\S*
re.sub(“\S*\d\S*”,“”,S)
将所有这些子字符串替换为空字符串“”,并且.strip()是无用的,因为它删除了上一个结果开头和结尾的空格您误解了代码\S
与\S
相反:它与除空格外的所有内容都匹配
由于Kleene星(*
)是贪婪的,因此它的目标是匹配尽可能多的非空格字符,后跟一个数字,后跟尽可能多的非空格字符。因此,它将匹配一个完整的单词,其中至少有一个字符是数字
然后,所有这些匹配项都被空字符串替换,因此从原始字符串中删除。您的代码首先匹配0+倍的非空白字符
\S*
(其中\S*
匹配空白字符),并将一直匹配到“单词”的结尾。然后它回溯到匹配一个数字,然后再次匹配0+非空白字符
例如,模式也将匹配单个数字
您可以稍微优化模式,使其首先不匹配空格字符或数字[^\s\d]*
,使用a防止第一个\s*
匹配整个单词
[^\s\d]*\d\S*
这就是您的
regex
的工作方式,您提到了\S
中的空格。但事实并非如此
这就是python提到的\s
和\s
\
匹配任何空白字符;这相当于类[\t\n\r\f\v]
\
匹配任何非空白字符;这相当于类[^\t\n\r\f\v]
这是与用于空白字符的\s
一起使用的
你会得到这样的输出
>>重新导入
>>>
>>>s=“ABCD AB55 AB55 CD A55D 5555”
>>>re.sub(“\s*\d\s*”,“”,s).strip()
“zhou zhou zhou zhou zhou zhou广告”
\S
匹配非空白字符,而不是空白字符。No\S
与\S
相反,所以除了空白字符外,所有字符都是空白字符。空白字符为\S
,非空白字符为\S
。注意它是大写的。此外,您的regexes一站式服务: