簡體   English   中英

新行的正則表達式無法弄清楚

[英]Regex for New Line Can't Figure out

我試圖獲得“每年”之后的任何內容,並在“所有稅款”之前,但無法弄清楚此正則表達式。

我嘗試了幾個正則表達式,但由於某種原因沒有奏效。 任何人都可以幫忙嗎? 嘗試使用 regexpal 和 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([\S\s]*)All taxes

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

這是一個 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))

查看在線正則表達式演示

(.+?)捕獲per annum.之間的任何文本per annum. 和一個換行符后跟All taxes are assessed 注意annum后面的點被轉義了,因為它是一個特殊的正則表達式字符。 . 由於re.S標志匹配行尾

此外, re.search找到第一個正則表達式匹配, match.group(1)獲取第 1 組中的捕獲。

您對原始字符串感到困惑。 在原始 Python 字符串中,反斜杠僅表示反斜杠。 但是正則表達式引擎會解釋這些。

r'\\\\'作為正則表達式匹配文字反斜杠。

r'\\n'作為正則表達式匹配換行符。

r'\\.' (或r'[.]''\\\\.'不帶r前綴)匹配文字點。

所以你的錯誤是匹配點的正則表達式,而不是匹配換行符的正則表達式。

另外,當然,如果你想匹配多行,就這么說;

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

非貪婪+? 說匹配盡可能少的重復,而不是盡可能多。

已經有其他答案可以使用,但是這個答案更准確地回答了“新行的正則表達式”問題。 在正則表達式中,點匹配除行終止符之外的任何字符。 所以你想匹配和捕獲任何字符或換行符。 我把這部分放在一個非捕獲組中,但這並不是絕對必要的。 您可以改為忽略內部組所做的所有匹配。

我假設您不想捕獲空行,因此我在捕獲組前面放置了另一個換行符。

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

前面提到的 [\\s\\S] 方法也有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM