[英]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.