需要高手对正则表达式的帮助,有一段文字:
Техническая информация
Дата
Время
Документ № 1
Подпись
Дата 10.08.2020
Какой-то текст
1/10
Техническая информация
Дата
Время
Документ № 2
Подпись
Дата 16.09.2020
Снова какой-то текст
2/10
...
告诉我如何编写正则表达式以获得某些信息(位置和数字),重复“文档”一词?
结果,我想获取这些文档的所有文档编号和位置,即 文件编号 1 和位置 1/10,文件编号 2 和位置 2/10。
我会将我的答案移至评论:
我将尝试解释更多
。使用这个正则表达式,我们正在寻找从“文档”的出现到“一个或多个数字/一个或多个数字”的匹配:
文件 #1
签名
日期 08/10/2020
一些文字
1/10
技术信息
日期
时间
文件 #2
签名
日期 09/16/2020
一些文字再次
2/10
这是正则表达式捕获的完全匹配,但是我们在模板中有捕获组,括号中的数据
(...)可以单独获取。第一组
\1将存储文件编号,第二组将包含\2位置。正是这些组需要进一步使用,因为
C#我不擅长它,我将给出一个来自docs.microsoft.com 文档页面的示例:关于正则表达式本身:
Документ №\h*- 文本文档 # 和零个或多个水平空白字符(\d+)- 要在第 1 组中捕获的一个或多个数字[\S\s]*?- 零个或多个任何空白和非空白字符,其中*?- 将停止在最近的惰性量词匹配匹配(\d+\/\d+)- 第二个要捕获的组,其中一个或多个数字表示通过/,然后是一个或多个数字。小心!
如果文本中未指定位置,则执行将持续到下一次匹配,即 如果保证文本在每个文档中都有指定的位置,则此模板适用。
如果可能没有指定位置,那么您应该在模板中指定当到达文本“文档”时停止对该文本的检查
工作示例:regex101
像这样的东西,我想:
Документ № (?<number>\d+)\s+(?<signature>[^\n]+)\s*Дата\s*(?<date>\d{2}\.\d{2}\.\d{4})\s*(?<text>.*?)\s+(?<position>\d+\/\d+)。假定签名不包含换行符。请注意文本中的非贪婪捕获。 链接到测试。