Skip to main content
 首页 » 编程设计

c#之正则表达式不捕获

2024年01月31日27cloudgamer

我正在尝试(未成功)使用 RegEx 提取一些信息,但我无法理解为什么某个特定元素未捕获到正确的组中。

这是表达式

^[\\* ](?'sname'[A-Z]+)/(?'fname'[A-Z]+) (\\*(?'chdinf'(INF|CHD)))? (?'random'.+?) (?'cpn'CPN[\\* ][1234])(?'status'.+?) (?'tktno'[0-9]+)$ 

这是一个示例输入

*SNAME/FNAME         *INF   CPN 2   XX XXXX      99999999999999 

*INF 文本应该在 chdinf 组中捕获,但它不是,而是被 random 组捕获。

*INF 文本是可选信息,因此 lazy ? 在分组结构的末尾。

如果我将 random 构造更改为 (?'random' +?)(空格,而不是 '.'),则 Regex 将完全失败。

PS:我一直在使用http://regexstorm.net/tester作为测试平台。

请您参考如下方法:

您没有考虑前面的空格。试试这个:

^[\* ](?'sname'[A-Z]+)\/(?'fname'[A-Z]+) +(\*(?'chdinf'(INF|CHD)))? (?'random'.+?) (?'cpn'CPN[\* ][1234])(?'status'.+?) (?'tktno'[0-9]+)$ 

查看我之前添加的“+”。这是您需要的吗?