首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Regex:在匹配的字符串中查找字符

问Python Regex:在匹配的字符串中查找字符
EN

Stack Overflow用户
提问于 2021-07-08 19:33:11
回答 2查看 100关注 0票数 0

我想在python中使用正则表达式来查找所有以\开头的单词。

之后,正则表达式将在匹配的单词中查找[,然后将其替换为下划线。

下面是一个示例:

代码语言:javascript
复制
input_string = SomeText \Word[0] Word[3] \SomeText[123] SomeText[10] SomeText
代码语言:javascript
复制
output_string = SomeText \Word_0] Word[3] \SomeText_123] SomeText[10] SomeText

下面的python代码将方括号替换为下划线:

代码语言:javascript
复制
output_string = re.sub(<regex>, '_', input_string)

我编写了这个正则表达式来查找以\开头的单词:

代码语言:javascript
复制
\\[^\s]+

https://regex101.com/r/d4YO9K/1

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

有没有人能提供一些解决这个问题的想法?

EN

回答 2

Stack Overflow用户

发布于 2021-07-08 19:39:02

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

代码语言:javascript
复制
def rep(m):
    return m.group(0).replace("[", "_")

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

代码语言:javascript
复制
re.sub(r"\\\S+", rep, "abc \\xyz[0] def")
'abc \\xyz_0] def'
票数 0
EN

Stack Overflow用户

发布于 2021-07-08 20:42:10

你想要匹配:

代码语言:javascript
复制
r'((?:^| )\\\w*?\['

并替换为:

代码语言:javascript
复制
r'\1_`

它是组1中的任何内容,后面跟一个'_‘。

  1. ( -组的开始1
  2. (?:^| ) -匹配字符串或space
  3. \\的开始-匹配backslash
  4. \w*? -匹配0个或更多单词字符non-greedily
  5. ) -组的结束1
  6. \[ -匹配a [

See Regex Demo

请注意,您不应该将变量命名为input,这是内置函数的名称。

代码语言:javascript
复制
import re

s = 'SomeText \Word[0] Word[3] \SomeText[123] SomeText[10] SomeText'

output = re.sub(r'((?:^| )\\\w*?)\[', r'\1_', s)
print(output)

打印:

代码语言:javascript
复制
SomeText \Word_0] Word[3] \SomeText_123] SomeText[10] SomeText
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68300844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档