正则表达式提取字符串之间的数据

Posted

技术标签:

【中文标题】正则表达式提取字符串之间的数据【英文标题】:Regex to extract data in between string 【发布时间】:2021-01-09 11:38:36 【问题描述】:

我尝试了下面的 ff 正则表达式,但它似乎不起作用。我想提取 F. Prepaids 和 G. Initial Escrow Payment 之间的数据,并得到下面的 ff 示例结果。谢谢。

#我的正则表达式

(?<=F. Prepaids)[\S\s]*?(?= G. Initial Escrow Payment)

#字符串

F. Prepaids $887.01
01 Homeowner's Insurance Premium ( 12 mo.) toAmerican Family  $893.00
Insura
02 Mortgage Insurance Premium (     mo.)
03 Prepaid Interest ($5.99 per day from 10/02/2020 to 10/01/2020) -$5.99
04 Property Taxes (     mo.)
05
06
07
08
G. Initial Escrow Payment at Closing $3,776.11

如果我得到介于两者之间的数据,我还想要一个正则表达式来获得 ff 结果,其中其他数据包括基于上述字符串的新行。

Homeowner's Insurance Premium ( 12 mo.) to American Family Insura
Mortgage Insurance Premium ( mo.)
Prepaid Interest ($5.99 per day from 10/02/2020 to 10/01/2020)
Property Taxes (     mo.)

对这个有什么想法吗?谢谢。

【问题讨论】:

要获取中间的内容,请省略 G 之前的空格。 什么意思? G前面的lookahead中有一个空格。见regex101.com/r/n6PgvI/1 使用(?&lt;=F. Prepaids)[\S\s]*?(?=G. Initial Escrow Payment) 试试this regex 【参考方案1】:

你可以使用

(?m)(?<=F\. Prepaids[\s\S]*?^\d+ )[^\r\n]+(?:\r?\n[^\n\d][^\r\n]*)?(?=[\s\S]*?\nG\. Initial Escrow Payment)

见regex demo

详情

(?m) - 开启多行模式 (?&lt;=F\. Prepaids[\s\S]*?^\d+ ) - 匹配紧接在 F. Prepaids 前面的位置,然后是尽可能少的任何零个或多个字符,然后是行首的 1+ 个数字,然后是空格 [^\r\n]+ - 除 CR 和 LF 之外的任何一个或多个字符和 (?:\r?\n[^\n\d][^\r\n]*)* - 零个或多个 CRLF 或 LF 结尾序列,任何非数字和非换行符,然后是除换行符和回车之外的任何零个或多个字符 (?=[\s\S]*?\nG\. Initial Escrow Payment) - 当前位置必须跟在后面 [\s\S]*? - 尽可能少的零个或多个字符 \n - 换行符 G\. Initial Escrow Payment - G. Initial Escrow Payment 文本。

【讨论】:

但是有一个文本被附加在下一行,例如对于第一个数字,输出应该是“美国家庭保险的房主保险费(12 个月)”,该保险在下一行,893.00 美元的钱被删除了。 ***.com/questions/64026623/… @MrDave 您无法在一次匹配操作中匹配不连续的文本。这就是您使用单个匹配/提取选项所能做的一切。不,regex101 不支持 .NET 语法。 @MrDave 您无法在一次匹配操作中匹配不连续的文本。。或者使用替换。你试过用替换吗? @MrDave 我不知道“似乎不起作用”是什么意思。正如你在我的演示中看到的,从Homeowner's Insurance Premium ( 12 mo.) toAmerican Family $893.00\r\nInsura 字符串,你得到Homeowner's Insurance Premium ( 12 mo.) toAmerican Family Insura 字符串,

以上是关于正则表达式提取字符串之间的数据的主要内容,如果未能解决你的问题,请参考以下文章

Java正则表达式提取标签之间的文本

正则表达式提取数字

无法使用正则表达式在双引号之间提取字符串

java如何用正则表达式提取#之间的字符串。例如cc#aaaaa#jdi#bbbbb#ji,需要提取aaaaa和bbbbb两个字符串。

如何使用正则表达式从引号之间提取包含所需字符串的组? [关闭]

使用正则表达式仅提取两个特定标记之间的数字