python正则表达式:查找匹配字符串中的字符

kxkpmulp  于 2021-08-25  发布在  Java
关注(0)|答案(2)|浏览(357)

我想在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
但现在我不知道如何找到方括号。
有人能提出一些解决这个问题的办法吗?

flvtvl50

flvtvl501#

您可以定义一个函数,该函数接受match对象并返回替换字符串:

def rep(m):
    return m.group(0).replace("[", "_")

并将其作为替换参数传递给 re.sub :

re.sub(r"\\\S+", rep, "abc \\xyz[0] def")
'abc \\xyz_0] def'
vawmfj5a

vawmfj5a2#

您要匹配:

r'((?:^| )\\\w*?\['

并替换为:

r'\1_`

这是第1组中的任何一个,后面跟一个“u”。 ( -第一组开始 (?:^| ) -匹配字符串或空格的开头 \\ -匹配反斜杠 \w*? -非贪婪地匹配0个或多个单词字符 ) -第1组结束 \[ -匹配[
参见正则表达式演示
请注意,您不应该命名变量 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

相关问题