匹配未被&包围的文字和;

时间:2017-02-16 11:17:02

标签: c# .net regex

我目前正在使用以下正则表达式:

(?<!&)[^&;]*(?!;)

匹配这样的文字:

match1&lt;match2&gt;

提取:

  1. match1
  2. match2
  3. 然而,这似乎与额外的五个空字符串相匹配。见Regex Storm.

    我怎样才能匹配上面列出的两个?

    请注意@xanatos的现有模式((?<=^|;)[^&]+)仅匹配以下字符串中的匹配1到3而不匹配4:

    match1&lte;match2&lt;match;3&#43;match&4
    

2 个答案:

答案 0 :(得分:3)

尝试将*更改为+

(?<!&)[^&;]+(?!;)

Test here

更正确的正则表达式:

(?<=^|;)[^&]+

Test here

这里的基本思想是“好”子字符串从字符串的开头(^)开始或在;之后开始,并在遇到&时结束( [^&]+)。

第三版......但是我们在这里展示如果你有问题,并决定使用正则表达式,现在你有两个问题:

(?<=^|;)([^&]|&(?=[^&;]*(?:&|$)))+

Test here

答案 1 :(得分:2)

我用它来管理它:

(?<Text>.+?)(?:&[^&;]*?;|$)

这似乎与所有角落情况相符,但它可能不适用于我目前无法想到的情况。

如果字符串以&...;模式开头,或者只是那个模式,那么这不会起作用。

See Regex Storm.