3

假设我有一个字符串:

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)

但这些都没有给出预期的结果。有什么建议么?

4

2 回答 2

2

尝试以下操作:

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

\w等价于[a-zA-Z0-9_],因此[\w\t ]将匹配单词字符、制表符和空格。所以这个正则表达式的意思是“匹配一个单词字符,后跟任意数量的单词字符或空白字符,后跟一个单词字符,或者匹配单个单词字符”。这样,您将匹配单词之间的空格,而不是单词之前或之后的空格。

于 2013-06-14T16:25:12.087 回答
1

我认为最接近您尝试的方法是:

new_string = re.sub(r'(\w *)+\w', "replace", original_string)
于 2013-06-14T16:37:20.400 回答