我想在python中使用正则表达式来查找所有以\开头的单词。
之后,正则表达式将在匹配的单词中查找[,然后将其替换为下划线。
下面是一个示例:
input_string = SomeText \Word[0] Word[3] \SomeText[123] SomeText[10] SomeTextoutput_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
但现在我不知道如何找到方括号。
有没有人能提供一些解决这个问题的想法?
发布于 2021-07-08 19:39:02
您可以定义一个函数,该函数接受匹配对象并返回替换字符串:
def rep(m):
return m.group(0).replace("[", "_")并将其作为替换参数传递给re.sub
re.sub(r"\\\S+", rep, "abc \\xyz[0] def")
'abc \\xyz_0] def'发布于 2021-07-08 20:42:10
你想要匹配:
r'((?:^| )\\\w*?\['并替换为:
r'\1_`它是组1中的任何内容,后面跟一个'_‘。
( -组的开始1(?:^| ) -匹配字符串或space\\的开始-匹配backslash\w*? -匹配0个或更多单词字符non-greedily) -组的结束1\[ -匹配a [请注意,您不应该将变量命名为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] SomeTexthttps://stackoverflow.com/questions/68300844
复制相似问题