【问题标题】:Regex for matching multiline text用于匹配多行文本的正则表达式
【发布时间】:2021-03-14 11:48:28
【问题描述】:

我有一个多行文本,我想从中匹配单词“描述金额”和以逗号作为分隔符的随机数字之间的文本。
示例输入:

Description Amount
Being the Amount received from above branch in favour of SAF SAF
FOR THE MONTH OF JANUARY-2021.
3,24,500.00

预期输出:

Being the Amount received from above branch in favour of SAF SAF
FOR THE MONTH OF JANUARY-2021.

输入示例:

Description Amount
Being the Amount received from above branch in favour of SD SAF
VALUE SAF OF CHAPAINAWABGANJ AREA FOR THE MONTH OF
JANUARY 2021
9,18,049.00

预期输出:

Being the Amount received from above branch in favour of SD SAF
VALUE SAF OF CHAPAINAWABGANJ AREA FOR THE MONTH OF
JANUARY 2021

输入包含多个变量 no 换行符。我使用了以下正则表达式:

(?<=Description Amount\s)(.*\n.*)

但它需要改进。在此先感谢。

【问题讨论】:

    标签: java regex multiline


    【解决方案1】:

    你可以试试这个避免多个前瞻断言的正则表达式:

    (?<=Description Amount\n)(?:.*\n)+?(?=\d+,\d)
    

    RegEx Demo

    正则表达式详细信息:

    • (?&lt;=Description Amount\n):断言我们在当前位置之前的一行中有Description Amount
    • (?:.*\n)+?: 匹配任意文本的 1 行或多行
    • (?=\d+,\d):断言我们在当前位置之前有number,digit

    【讨论】:

      【解决方案2】:

      如果数字在行首,你可以使用

      (?<=Description Amount\n)(?:(?!\d+,\d).*\n)*
      

      模式匹配

      • (?&lt;=Description Amount\n)
      • (?:非捕获组
        • (?!\d+,\d).*\n如果不以数字、逗号和数字开头,则匹配整行
      • )* 关闭群组并可选择重复

      Regex demo

      如果应该至少有一行,则可以将组的量词更改为+

      (?<=Description Amount\n)(?:(?!\d+,\d).*\n)+
      

      Regex demo

      【讨论】:

        猜你喜欢
        • 2011-04-08
        • 1970-01-01
        • 2010-10-09
        • 1970-01-01
        • 1970-01-01
        • 2016-04-05
        • 1970-01-01
        相关资源
        最近更新 更多