假设我有一个字符串:
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)
但这些都没有产生预期的结果。有什么建议吗?
答案 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)