我见过几个类似的问题,甚至是我自己发布的一个,但这是相当具体的。
在正则表达式中有一个匹配模式。现在说在同一个字符串中有两个匹配模式都可以匹配文本。看来我的运气总是倾向于匹配错误模式的正则表达式。(我在 C# 中使用 .Net 正则表达式)
我有两种类型的字符串需要分解:
01 - 第一个值|02 - 第二个值|空白 - 忽略
和:
A - 第一个值空白B - 第二个值C - 第三个值
所以我想要的结果是使用一个模式字符串将代码与含义匹配
Code,Meaning
01,First Value
02,Second Value
Blank,Ignore
A,First Value
blank,
B,Second Value
C,Third Value
我尝试了几种模式,但似乎永远无法完全正确。我能得到的最接近的是:
(([A-Z0-9]{1,4})[ \-–]{1,3}|([Bb]lank)[ \-–]{0,3})(([A-Z][a-z]+[.,;| ]?)+)
我的崩溃:
[A-Z0-9]{1,4}[ \-–]{1,3}
--> 这匹配代码、大写字母或长度为 1 - 4 个字符的数字,后跟 1 到 3 个空格字符、连字符或来自 html 的 mdash。
或者
[Bb]lank[ \-–]{0,3}
--> 空白后跟 0-3 个字符的空格、连字符或来自 html 的 mdash
然后
(([A-Z][a-z]+[.,;| ]?)+)
--> 应该匹配任何多个单词,包括可能的空格。所以 First 和 Value,Second 和 Value 应该匹配。
最初的问题是最终模式组与第二个输入字符串中的“Valueblank”匹配。我想以某种方式优先考虑“[Bb]lank”应该作为第一组的一部分进行匹配,而不是第二组的一部分。
我尝试(?![Bb]lank)
在 finalgroup 中放置一个否定的前瞻,但它似乎从来没有奏效。任何帮助,将不胜感激。
谢谢
Jaeden "Sifo Dyas" al'Raec 毁灭者