Python 正则表达式删除";及;一串
我正在尝试清理(稍后比较)艺术家名称,并希望删除:Python 正则表达式删除";及;一串,python,regex,string,remove,Python,Regex,String,Remove,我正在尝试清理(稍后比较)艺术家名称,并希望删除: 非字母字符,或 空白,或 “和”这个词 所需输出:“bootsycollinsterubberband 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 = '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]
的缩写形式。因此,请使用:
\s+(和)\s\W
前两个正则表达式与“and”不匹配,因为当到达字符串中的该位置时,正则表达式的\s
部分将匹配“and”之前的空格,而不是正则表达式的\s+(and)\s
部分
您只需更改顺序,以便首先尝试后一种方法。而且,\s
是[^\w]
的一部分,因此不需要单独匹配\s
。最后,\w
是[^\w]
的缩写形式。因此,请使用:
\s+(和)\s\W
为了支持您制定的规则,而不仅仅是在引用的示例文本上,您需要一个更通用的正则表达式,它为re.sub
调用设置了正确的标志:
re.sub(r'\band\b|\W', '', s, flags=re.IGNORECASE)
解释
- 设置标志
,以便您也可以删除句子中的“And”(以及其他大小写组合变体)。如果您只想删除“And”,而不想删除其任何变体,则可以删除此标志设置re.IGNORECASE
两侧带有单词边界标记的单词“和”。这与3个字符的顺序“和”匹配作为一个独立的词,而不是另一个词的子串。使用\band\b
来隔离单词,而不是像\b
那样将单词括在空格中,这样做的优点是\s+和\s
选项还可以检测字符串中的单词边界,如\b
,而和,
不能检测。这是因为逗号不是空白\s+和\s
- 由于空格
也是一种非单词\s
(因为单词\W
相当于\W
),所以这两种代码不需要单独的regex标记<代码>\W已包括[a-zA-Z0-9\]
。因此,您可以简化正则表达式,而无需单独使用\s
\s
\s+
或\s
代替\b
作为单词边界)
为了支持您设置的规则,而不仅仅是在引用的示例文本上,您需要一个更通用的正则表达式,带有
re.sub
调用的正确标志设置:
re.sub(r'\band\b|\W', '', s, flags=re.IGNORECASE)
解释
- 设置标志
,以便您也可以删除句子中的“And”(以及其他大小写组合变体)。如果只想删除“and”,而不想删除其任何变体,则可以删除此标志设置re.IGNORECASE
两侧带有单词边界标记的单词“和”。这是为了将3个字符序列“and”作为一个独立的单词匹配,而不是作为另一个单词的子字符串。使用\band\b
来隔离单词,而不是像\b
那样将单词括在空格中,这样做的优点是\s+和\s
选项还可以检测字符串中的单词边界,如\b
,而和,
不能检测。这是因为逗号不是空白\s+和\s
- 由于空格
也是一种非单词\s
(因为单词\W
相当于\W
),所以这两种代码不需要单独的regex标记<代码>\W已包括[a-zA-Z0-9\]
。因此,您可以简化正则表达式,而无需单独使用\s
\s
\s+
或\s
代替\b
作为单词边界)
你能对这个答案给出一些反馈吗?你能对这个答案给出一些反馈吗?让我们知道这些答案是否对你有用。如果您需要更多信息,请同时告诉我们。让我们知道任何答案是否对您有用。如果您需要更多信息,也请告知我们。
s = 'Bootsy Collins And The Rubber Band'
res = re.sub(r'\band\b|\W', '', s, flags=re.IGNORECASE)
print(res)
Output:
'BootsyCollinsTheRubberBand'
s = 'Bootsy Collins and, The Rubber Band'
res = re.sub(r'\band\b|\W', '', s, flags=re.IGNORECASE)
print(res)
Output:
'BootsyCollinsTheRubberBand'
s = 'Bootsy Collins and, The Rubber Band'
res = re.sub(r'\s+(and)\s|\W', '',s)
print(res)
Output: 'and' is NOT removed
'BootsyCollinsandTheRubberBand'