【问题标题】:Regex for New Line Can't Figure out新行的正则表达式无法弄清楚
【发布时间】:2020-01-11 02:24:30
【问题描述】:

我正在尝试获取“每年”之后和“所有税”之前的任何内容,但无法找出正则表达式。

我尝试了几个正则表达式,但由于某种原因没有奏效。任何人都可以帮忙吗?尝试使用正则表达式和 python,但两者都不起作用。

> r'per annum\\.(.+)\nAll taxes are assessed'
> 
> r'per annum\\.\n(.+)\nAll taxes are assessed'

> r'per annum(.+)nAll taxes are assessed'

interest charges at 8.0 % per annum.

MCMAHON, DENISE M
%RDM PROPERTIES
PO BOX 653
GOFFSTOWN NH 03045
MCMAHON, RAYMOND J
All taxes are assessed as of April 1st of each year.  Unless 
directed otherwise, tax bills are mailed to the last known 
address of the first owner l

【问题讨论】:

  • per annum\.\n((\n|.)*)All taxes capture group 1 会有你想要的我想。不过,我不熟悉 python 转义。见regex101.com/r/IaQOV0/1
  • 我很困惑,为什么 (\n|.)* 会起作用,但 (.)* 两者之间的任何东西都不起作用

标签: python regex newline


【解决方案1】:
per annum.\n([\S\s]*)All taxes

可以为你工作。 [\S\s] 匹配任何字符,包括换行符。

【讨论】:

    【解决方案2】:

    这是一个 Python 解决方案:

    import re
    text = 'your text here'
    match = re.search(r'\bper annum\.\s*(.+?)\nAll taxes are assessed', text, re.S)
    if match:
      print(match.group(1))
    

    online regex demo

    (.+?) 捕获per annum. 和后跟All taxes are assessed 的换行符之间的任何文本。请注意annum 之后的点被转义,因为它是一个特殊的正则表达式字符。 . 匹配行尾,感谢 re.S 标志

    另外,re.search 找到第一个正则表达式匹配,match.group(1) 获得第 1 组中的捕获。

    【讨论】:

    • 使用 s 标志可能是最简单和最漂亮的解决方案。
    【解决方案3】:

    已经有其他答案可以使用,但是这个答案更准确地回答了“新行的正则表达式”这个问题。在正则表达式中,点匹配除行终止符之外的任何字符。所以你想匹配和捕获任何字符或换行符。我把这部分放在一个非捕获组中,但这并不是绝对必要的。您可以改为忽略内部组进行的所有匹配。

    我假设你不想捕获空行,所以我在捕获组前面放了另一个换行符。

    r'per annum\.\n\n((?:.|\n)+)\nAll taxes'
    

    如前所述,[\s\S] 方法也有效。

    【讨论】:

    • @Toto 很棒的链接,我同意。问题仍然是“新行的正则表达式”。应该是“Regex to not exclude New Line”。
    【解决方案4】:

    您对原始字符串感到困惑。在原始 Python 字符串中,反斜杠仅表示反斜杠。但随后正则表达式引擎会解释这些。

    r'\\' 作为正则表达式匹配文字反斜杠。

    r'\n' 作为正则表达式匹配换行符。

    r'\.'(或r'[.]''\\.',不带r 前缀)匹配文字点。

    所以你的错误是匹配点的正则表达式,而不是匹配换行符的正则表达式。

    另外,当然,如果要匹配多行,就这么说吧;

    r'per annum\.(\n.+)+?All taxes are assessed'
    

    不贪心的+? 说要匹配尽可能少的重复,而不是尽可能多。

    【讨论】:

    • 两者兼而有之。正则表达式中的点与行终止符不匹配。
    • 我认为你想写“懒惰”而不是“贪婪”。更重要的是,您的编辑根本不匹配输入字符串。
    猜你喜欢
    • 2013-02-14
    • 2021-05-18
    • 2013-12-16
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    相关资源
    最近更新 更多