【问题标题】:Parseing regex with groups and subgroups?用组和子组解析正则表达式?
【发布时间】:2011-12-02 12:28:15
【问题描述】:

我有这段文字:

*   Ikke 26/12 11.
**  Ikke 24/12 11.
*** Ikke 22/8 11. Ikke 29/8 11. Ikke 5/9 11. Ikke 12/9 11. Ikke 19/9 11. Ikke 26/9 11. Ikke 3/10 11. Ikke 10/10 11. Ikke 17/10 11. Ikke 24/10 11. Ikke 31/10 11. Ikke 7/11 11. Ikke 14/11 11. Ikke 21/11 11. Ikke 28/11 11. Ikke 5/12 11. Ikke12/12 11. Ikke 19/12 11.
****    Ikke 25/12 11.

我正在尝试编写一个正则表达式来获取所有星号和日期。但我需要知道之前出现的星号的数量。

到目前为止,我已经提出了(?<Stars>\**)*(?<Date>\d{1,2}/\d{1,2} \d{2}),但由于某种原因它找不到星号。

我知道我可以先拆分文本,但我只想尝试使用正则表达式

【问题讨论】:

  • 你想要输出什么?

标签: c# regex


【解决方案1】:

你可能最好对类似的东西进行匹配

(?m)^(?<Stars>\*+)|(?<Date>\d{1,2}/\d{1,2} \d{2})

每场比赛都会查看您是否获得了星星(定义了第一组)或日期。如果您有星星,请将其保存在变量中以备后用。当日期匹配时,检查之前存储的星号变量。

【讨论】:

  • 这只会得到第一颗星......它不会得到后续的......但是去掉开头的“^”会使其工作。
  • 它得到了所有的星星,忘了提到你需要多行标志,或者只是在正则表达式的开头添加(?m)
【解决方案2】:

我猜你想要

(?<Stars>\**)

不是

(?<Stars>\**)*

这可能会用“空运行”“破坏”最新的星号匹配(因为 * 允许 0 或更多)。

或者:

(?<Stars>\*+)?

(匹配 1 个或多个 * - 可选)

【讨论】:

    【解决方案3】:

    这应该可行...基本上你没有什么要说的忽略日期和星星之间的东西...

    (?<Stars>[*]*)(?<ignore>.*?)(?<Date>\d{1,2}/\d{1,2} \d{2})
    

    【讨论】:

      【解决方案4】:

      这里:

      (?<astrix>[\*]+)|(?<Date>\d{1,2}/\d{1,2} \d{2})
      

      http://regexr.com?2vc8s

      【讨论】:

        猜你喜欢
        • 2019-10-18
        • 2014-05-08
        • 1970-01-01
        • 2021-10-05
        • 1970-01-01
        • 2022-01-25
        • 2012-03-10
        • 2010-09-29
        • 1970-01-01
        相关资源
        最近更新 更多