使用 python 正则表达式获取 raw_text 的两个换行符 (\n) 之间的所有文本

get all the text between two newline characters(\n) of a raw_text using python regex

所以我有几个原始文本示例,其中我必须提取 'Terms' 之后的字符。我看到的常见模式是在单词 'Terms' 之后有一个 '\n' 并且在末尾 '\n' 我想将这些之间存在的所有字符(单词,数字,符号)提取到 \n但在关键字 'Terms'.

之后

部分文字示例如下:

1) \nTERMS \nDirect deposit; Routing #256078514, acct. #160935\n\n'
2) \nTerms\nDue on receipt\nDue Date\n1/31/2021
3) \nTERMS: \nNET 30 DAYS\n

我写的代码如下:

def get_term_regex(s):
    raw_text = s
    term_regex1 = r'(TERMS\s*\n(.*?)\n)'

    try:
        if ('TERMS' or 'Terms') in raw_text:
            
            pattern1 = re.search(term_regex1,raw_text)
            #print(pattern1)
            return pattern1
    except:
        pass

但是我没有得到任何输出,因为没有匹配项。

预期输出为:

1) Direct deposit; Routing #256078514, acct. #160935
2) Due on receipt
3) NET 30 DAYS

任何帮助将不胜感激。

尝试以下操作:

import re

text = '''1) \nTERMS \nDirect deposit; Routing #256078514, acct. #160935\n\n'
2) \nTerms\nDue on receipt\nDue Date\n1/31/2021
3) \nTERMS: \nNET 30 DAYS\n''' # \n are real new lines

for m in re.finditer(r'(TERMS|Terms)\W*\n(.*?)\n', text):
    print(m.group(2))
  1. 请注意,您的正则表达式无法处理第三个 'line',因为 TERMS 之后有一个冒号 :。所以我用 \W.

    替换了 \s
  2. ('TERMS' or 'Terms') in raw_text 可能不是您想要的。它不会引发语法错误,但它与 'TERMS' in raw_text 相同;当python计算括号部分时,'TERMS''Terms'都是truthy,因此python只取最后一个truthy值,即 'Terms'。结果是,TERMS 无法被那部分拾取!

    所以你可能想要像 ('TERMS' in raw_text) or ('Terms' in raw_text) 这样的东西,尽管它很冗长。