我想在python中使用正则表达式来查找所有以开头的单词。
然后,正则表达式应该在匹配的单词中查找[
,然后用下划线替换它。
这里有一个例子:
input_string = SomeText Word[0] Word[3] SomeText[123] SomeText[10] SomeText
output_string = SomeText Word_0] Word[3] SomeText_123] SomeText[10] SomeText
以下python代码用下划线替换方括号:
output_string = re.sub(<regex>, '_', input_string)
我写了这个正则表达式来查找以:开头的单词
\[^s]+
https://regex101.com/r/d4YO9K/1
但现在我不知道如何找到方括号。
有人能提出一些解决这个问题的想法吗?
您想要匹配:
r'((?:^| )\w*?['
并替换为:
r'1_`
它是第1组中的任何一个,后面跟一个"_"。
(
-第1组开始(?:^| )
-匹配字符串或空格的开头\
-匹配反斜杠w*?
-非贪婪地匹配0个或多个单词字符)
-第1组结束[
-匹配[
请参阅Regex演示
请注意,您不应该将变量命名为input
,它是内置函数的名称。
import re
s = 'SomeText Word[0] Word[3] SomeText[123] SomeText[10] SomeText'
output = re.sub(r'((?:^| )\w*?)[', r'1_', s)
print(output)
打印:
SomeText Word_0] Word[3] SomeText_123] SomeText[10] SomeText
您可以定义一个函数,该函数接受匹配对象并返回替换字符串:
def rep(m):
return m.group(0).replace("[", "_")
并将其作为替换参数传递给re.sub
:
re.sub(r"\S+", rep, "abc \xyz[0] def")
'abc \xyz_0] def'