繁体   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