在Python中,我试图清除(稍后比较)艺术家名称,并希望删除:
输入字符串:Bootsy Collins and The Rubber Band
所需输出:BootsyCollinsTheRubberBand
s = 'Bootsy Collins and The Rubber Band'
res1 = re.sub(r'[^\w]|\s|\s+(and)\s', "",s)
res2 = re.sub(r'[^\w]|\s|\sand\s', "",s)
res3 = re.sub(r'[^\w]|\s|(and)', "",s)
print("\b",s,"\n"
,"1st: ",res1,"\n"
,"2nd: ",res2,"\n"
,"3rd: ",res3)
Output:
Bootsy Collins and The Rubber Band
1st: BootsyCollinsandTheRubberBand
2nd: BootsyCollinsandTheRubberBand
3rd: BootsyCollinsTheRubberB
前两个正则表达式与“and”不匹配,因为当到达字符串中的该位置时,正则表达式的
\s
部分将匹配“and”之前的空格,而不是正则表达式的\s+(and)\s
部分您只需更改顺序,以便先尝试后一种方法。另外,
\s
是[^\w]
的一部分,因此不需要单独匹配\s
。最后,\W
是[^\w]
的较短形式。因此,请使用:为了支持您设置的规则,而不仅仅是在引用的示例文本上,您需要一个更通用的正则表达式,为
re.sub
调用设置正确的标志:解释
re.IGNORECASE
,以便您也可以删除句子中的“And”(以及其他大小写组合变体)。如果只想删除“and”,而不想删除其任何变体,则可以删除此标志设置李>\band\b
两侧用单词边界标记\b
括起来的单词“和”。这是为了将3个字符序列“and”作为一个独立的单词匹配,而不是作为另一个单词的子字符串。使用\b
来隔离单词,而不是将单词封闭在像\s+and\s
这样的空格中,这样做的好处是\b
选项还可以检测字符串中的单词边界,比如and,
,而\s+and\s
则不能。这是因为逗号不是空白李>\s
也是一种非单词\W
(因为单词\w
相当于[a-zA-Z0-9_]
),所以这两个单词不需要单独的正则表达式标记\W
已包括\s
。因此,您可以简化正则表达式,而无需单独使用\s
李>演示
测试用例#1:
测试用例#2(“And”被删除):
测试用例#3(“and”[在“and”之后加逗号]被删除)
计数器测试用例:(regex使用空格
\s+
或\s
代替\b
作为单词边界)相关问题 更多 >
编程相关推荐