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

ffvjumwh  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(94)

**已关闭。**此问题需要debugging details。它目前不接受回答。

编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答这个问题。
上个月关门了。
Improve this question
我想要一个正则表达式下面的文本:

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

在这里,\editable是公共的,所以我们需要在正则表达式中添加这个关键字。我希望方括号内的内容作为匹配1,花括号内的内容作为匹配2。
我还有一个条件,它可能有多个花括号,所以我们可以添加一个条件,比如在花括号开始后,它不应该是\,如果不是,考虑这些花括号并返回里面的值。
所以,在我的例子中,我的价值观是:

Blah
anna karenina

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

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

这是我的工作要求,但它不返回文本中的所有匹配;它只返回一个。

oaxa6hgo

oaxa6hgo1#

您可以尝试使用this regex

\\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

相关问题