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