用正则表达式提取重复模式

3
我有一些文本,其中写着一系列的(id(以P数字的形式)、破折号和名称)。 例如:
P1 - code23
P2 - name asd, P3 -name3
P3 - 837/55 P5 - code/55

如您所见,夫妇PX的名称可以通过换行符、逗号或空格进行分割。
使用正则表达式模式。
(((?<id>P\d)(\s)?-(\s)?(?<name>(.)*)(,)?(\n)?))   

我可以提取在不同行上重复的匹配项的名称组,但不能提取由逗号或空格分隔的名称。 从上面的文本中提取的名称是:
code23 (right)
name asd, P3 -name3 (wrong)
837/55 P5 - code/55 (wrong)

如何修改我的图案?

单行模式 (?<id>P\d)(\s?-\s?)(?<name>.*?)(\s|,|\.|\n|$) - michal krzych
1个回答

1

你可以尝试

(?<id>P\d+)\s*-\s*(?<name>.*?)(?=$|,?\s*P\d)

请查看正则表达式演示(在演示中仅添加了\r?,因为开启了多行模式并且输入是多行的,如果字符串分别处理,则不需要\r?和多行模式)。

说明

  • (?<id>P\d+) - 组ID,P + 1个数字
  • \s*-\s* - 0个或多个空格,- 和再次0个或多个空格
  • (?<name>.*?) - 捕获除换行符以外的0个或多个字符的组名称,直到第一个出现
  • (?=$|,?\s*P\d) - 字符串结束(是的,只有一个)或可选逗号,0个或多个空格,P和一个数字。

结果:

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接