我正在研究 C# 正则表达式。
输入文本:
headera
aa1aaa
aa2aaa
aa3aaa
headerb
aa4aaa
aa5aaa
aa6aaa
headerc
aa7aaa
aa8aaa
aa9aaa
Run Code Online (Sandbox Code Playgroud)
我只想捕获headerb和headerc之间的数字 4、5 和 6
我的尝试:
我能够使用下面的模式捕获 headera 和 headerb 下的内容。我不能在后视上应用相同的概念,因为这应该是零宽度,因此不允许使用量词。
aa(\d+)aaa(?=[\s|\S]*headerc)
Run Code Online (Sandbox Code Playgroud)
重复捕获组将仅捕获最后一次迭代。我无法为多个实例应用一些通配符正则表达式。
请协助。谢谢
[已解决] 利用 .Net 能够支持可变宽度后视的优势。您可以使用以下模式:
@"(?<=headerb[\s|\S]*)aa(\d)aaa(?=[\s\S]*headerc)"
@"(?s)(?<=\bheaderb\b.*?)\d+(?=.*?\bheaderc\b)"
@"(?<=\bheaderb\b(?:(?!\bheaderc\b)[\s\S])*)aa(\d+)aaa"
Run Code Online (Sandbox Code Playgroud)
我真的建议简化问题,并在这种情况下仅在每行处理中使用正则表达式,首先预先选择正确的行。
无论如何,对于这个特定的例子来说,事情很简单:
headerb\n(aa(\d+)aaa\n)+\nheaderc
Run Code Online (Sandbox Code Playgroud)
应该管用。您可能需要调整空格/换行符。只需从 (\d+) 组中获取数字即可。PS,为了方便起见,您可以使用命名组,例如。
(?<number>\d+)将创建该number组。
更多信息请参见:https://msdn.microsoft.com/en-us/library/bs2twtah(v= vs.110).aspx
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |