正则表达式通过忽略所需组之间的特定匹配来返回所有/多个匹配项 [已关闭]

Regex to return all/multiple matches by ignoring specific match in between the required groups [closed]

提问人:Komal Rumade 提问时间:9/14/2023 最后编辑:Adrian MoleKomal Rumade 更新时间:9/17/2023 访问量:63

问:


编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将有助于其他人回答这个问题。

2个月前关闭。

我想要以下文本的正则表达式:

 \editable[blab]{\textit{anna karenina}}

在这里,将很常见,因此我们需要在正则表达式中添加该关键字。 我希望方括号内的内容作为匹配 1,大括号内的内容作为匹配 2。\editable

我还有一个条件,它可能有多个大括号,因此我们可以添加一个条件,例如在大括号开始后,它不应该是,如果不是,请考虑这些大括号并返回里面的值。\

所以,就我而言,我的价值观将是:

Blah
anna karenina

我尝试了多个正则表达式,包括下面的正则表达式,但它们不起作用。

 r"\\editable\[(.*?)\]{\\.*\{(.*?)\}}"

这符合我的要求,但它不会返回文本中的所有匹配项;它只返回一个。

Python 正则表达式 搜索 嵌套 匹配

评论

1赞 Michael Butscher 9/14/2023
在问题中将您自己的努力(正则表达式)显示为格式正确的文本,即使它不起作用。
0赞 Komal Rumade 9/14/2023
r“[([^[]\{\}]*(?:\\editable)\s\{)(.*?)\}“尝试了这个,也尝试了更多
0赞 EJoshuaS - Stand with Ukraine 9/14/2023
你尝试了哪种正则表达式?

答:

0赞 shaik moeed 9/14/2023 #1

你可以尝试使用这个正则表达式

\\editable\[(.*?)\]{\\.*\{(.*?)\}}

法典:

text = "\\editable[blab]{\\textit{anna karenina}}"
pattern = r"\\editable\[(.*?)\]{\\.*\{(.*?)\}}"
match = re.search(pattern, text)

print(match.group(1))
print(match.group(2))

输出:

blab
anna karenina

更新-1:

要处理具有多种模式的文本,

import re

text = "\\editable[blab]{\\textit{anna karenina}} and \\editable[another]{\\xyz{some example}}"

pattern = r"\\editable\[(.*?)\]{\\(?:.*?)\{(.*?)\}}"
results = re.findall(pattern, text)

for result in results:
    square_bracket_content, flower_bracket_content = result
    print("Square bracket content:", square_bracket_content)
    print("flower bracket content:", flower_bracket_content)

输出:

Square bracket content: blab
flower bracket content: anna karenina
Square bracket content: another
flower bracket content: some example

评论

0赞 Komal Rumade 9/14/2023
\text它不会被修复,可能有类似 \bold{\bah{mytext}} 的东西
0赞 Komal Rumade 9/14/2023
尝试过但没有给出任何匹配
0赞 shaik moeed 9/14/2023
你怎么努力?您可以通过编辑您的帖子来共享代码吗?
1赞 Komal Rumade 9/14/2023
尝试过并且正在工作
0赞 Komal Rumade 9/14/2023
我还有一个问题,好像我的文本包含多个这样的模式怎么办?