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

2024-06-16 16:51:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在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

但现在我不知道如何找到方括号

有人能提出一些解决这个问题的办法吗


Tags: 代码httpsrecominputoutputstring单词
2条回答

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

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

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

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

您要匹配:

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

并替换为:

r'\1_`

这是第1组中的任何一个,后面跟一个“u”

  1. (-组1的开始
  2. (?:^| )-匹配字符串或空格的开头
  3. \\-匹配反斜杠
  4. \w*?-不贪婪地匹配0个或多个单词字符
  5. )-第1组结束
  6. \[-匹配a[

See Regex Demo

请注意,您不应该命名变量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

相关问题 更多 >