我有一些文本,其中写有(id(以Pnumber形式),短划线和名称)的列表。 喜欢在:
P1 - code23
P2 - name asd, P3 -name3
P3 - 837/55 P5 - code/55
如你所见,情侣PX - 名字可以用\ n,逗号或简单空格分隔。
使用正则表达式
(((?<id>P\d)(\s)?-(\s)?(?<name>(.)*)(,)?(\n)?))
我可以提取在不同行上重复的匹配名称组,但不能提取除以或空格的名称组。 从上面的文字中提取的名字是
code23 (right)
name asd, P3 -name3 (wrong)
837/55 P5 - code/55 (wrong)
如何修改模式?
答案 0 :(得分:1)
您可以尝试
(?<id>P\d+)\s*-\s*(?<name>.*?)(?=$|,?\s*P\d)
请参阅演示中添加的regex demo(\r?
,因为多行模式已启用且输入为多行,如果字符串是单独处理的,则不需要\r?
和多行模式)。
解释:
(?<id>P\d+)
- 群组ID,P
+ 1+位数\s*-\s*
- 0+个空格,-
和0 +空格(?<name>.*?)
- 群组名称,除第一个以外的换行符以外的0个字符(?=$|,?\s*P\d)
- 字符串结尾(是的,唯一的)或可选的逗号,0 +空格,P
和数字。结果: