String中可选的忽略空格(来自Char集)正则表达式Python

时间:2013-06-14 16:22:31

标签: python regex

假设我有一个字符串:

original_string = "(white || black) && (blue || yellow)"

我用以下文字“替换”替换每个单词:

new_string = re.sub(r'[a-zA-Z0-9_]+', "replace", original_string) 

所以我回来了:

"(replace || replace) && (replace || replace)"

这很好用。但即使original_string在单词之间包含空格(或者即使它没有),我也会喜欢相同的结果。

例如:

original_string = (light pink || pink) && (very dark brown || blue)

我还是想回来:

"(replace || replace) && (replace || replace)"

我见过其他人问这个问题,但是当我尝试解决方案时,我没有得到正确的替换(通常在维护括号时存在一些问题)。我已经尝试过的一些事情是:

 new_string = re.sub(r'[? \w+ ?]+', "replace", original_string)
 new_string = re.sub(r'[\w+( \w+)*$]+', "replace", original_string)

但这些都没有产生预期的结果。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

尝试以下方法:

new_string = re.sub(r'\w[\w\t ]*\w|\w', "replace", original_string)

\w相当于[a-zA-Z0-9_],因此[\w\t ]将匹配单词字符,制表符和空格。因此,这个正则表达式意味着“匹配一个单词字符,后跟任意数量的单词字符或空白字符,后跟一个单词字符,或匹配一个单词字符”。这样,您将匹配单词之间的空格,但不会匹配单词之前或之后的空格。

答案 1 :(得分:1)

我认为最接近你所尝试的将是这样的:

new_string = re.sub(r'(\w *)+\w', "replace", original_string)