python - 在 python 中匹配先前定义的组

标签 python regex

这个问题是关于在 python 中匹配先前定义的组......但它并不那么简单。

这是我要匹配的文本:

Figure 1: Converting degraded weaponry to research materials.

Converting degraded weaponry to research
materials.

这是我的正则表达式:

(Figure )(\d)(\d)?(: )(?P<description>.+)(\n\n)(?P=description)

现在,我目前遇到的问题是正则表达式无法匹配文本,因为换行符出现在第三行的“research”之后。我希望 python 在将前一组与我的字符串匹配时忽略换行符。

最佳答案

似乎有两种通用的方法:要么将文本规范化(如 jhermann 所建议的那样),要么有一个函数/代码片段为每个可能的匹配项运行并进行比您在单个中进行的更复杂的比较正则表达式。

规范化:

text = re.sub(r"\n\n", somespecialsequence, text);
text = re.sun(r"\s*\n", " ", text);
text = re.sub(r"\s+", " ", text);
text = re.sub(somespecialsequence, "\n\n", text);

现在,这应该按预期工作:(Figure )(\d)(\d)?(: )(?P<description>.+)(\n\n)(?P=description)

或者,使用代码片段:

matches = re.finditer(r"(Figure )(\d+)(: )(.+)(\n\n)(.+)(?=Figure )", text, flags=re.S)
for m in matches:
    text1 = m.group(4)
    text2 = m.group(6)
    text1 = re.sub("\W+", " ", text1)
    text2 = re.sub("\W+", " ", text2)
    if (text1 == text2):
        // this is a match

关于python - 在 python 中匹配先前定义的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19548868/

相关文章:

javascript - 在句子中,如何使第一个字母大写,后跟点 ('.' )和空格(零个或多个)

python - 将单引号替换为双引号,但保留双引号内的引号不变

python - 检查对象是否为列表的 pythonic 方法是什么?

regex - 使用awk打印从匹配到文件结尾的行

regex - 匹配具有相同字母的单词

python - 使用python查找字符串中索引之前出现的两个单词

Python 将函数从另一个目录导入到文件,该文件又从自己的目录导入另一个函数

python - 使用 strptime 获取日期时间对象时出现 ValueError

python - 计算 i^2453467 mod 2453468 对于 1<=i<=999999 的总和(^ 表示幂)

python - 从 csv 文件中删除某些列与特定正则表达式匹配的行