我目前正在使用以下正则表达式:
(?<!&)[^&;]*(?!;)
要匹配这样的文本:
match1<match2>
并提取:
-
match1
-
match2
但是,这似乎匹配了额外的五个空字符串。请参阅Regex Storm.
如何才能只匹配上面列出的两个?
请注意,@xanatos 的现有模式 ( (?<=^|;)[^&]+
) 将仅匹配以下字符串中的第 1 到 3 个匹配项,而不匹配第 4 个匹配项:
match1<e;match2<match;3+match&4
最佳答案
尝试将 *
更改为 +
:
(?<!&)[^&;]+(?!;)
更正确的正则表达式:
(?<=^|;)[^&]+
这里的基本思想是,“好的”子字符串从字符串的开头 (^
) 或 ;
之后开始,并在遇到&
([^&]+
)。
第三个版本...但是在这里我们展示了如果您遇到问题并且决定使用正则表达式,那么现在您有两个问题:
(?<=^|;)([^&]|&(?=[^&;]*(?:&|$)))+
关于c# - 匹配未由 & 和 ; 包围的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42272417/