正则表达式中的组,匹配不以特定字符开头的每个子字符串

时间:2014-11-21 12:14:49

标签: c# regex regex-group

我正在尝试在匹配每个子字符串的正则表达式中编写一个组,除了那些以“”开头的'

我的正则表达式的长篇故事是:以2个人名开头并以10位数身份结尾的东西。主要是我有3组:名称,中间部分和ID。

所以必须匹配

来自纽约的Jennifer Ann ,“Wisdom”str,bl。 54,В,id 1234567890

in

her name was Jennifer Ann from New York, "Wisdom" str, bl 54, B, with id 1234567890 which is very rare

但不匹配任何内容:

her name was Jennifer Ann" from New York, "Wisdom" str, bl 54, B, with id 1234567890 which is very rare

因为Ann之后的引用。现在我的中间组看起来像这样:

(?'compositeMiddle'。*?)匹配所有内容。我想让它匹配除了以

开头的子串之外的所有内容

2 个答案:

答案 0 :(得分:1)

好像你想要这样的东西,

^[A-Z][a-z]+\s[A-Z][a-z]+(?:[^"']|"[^"]*"|'[^']*')*?\b\d{10}$

DEMO

(?:[^"']|"[^"]*"|'[^']*')*?首先,正则表达式引擎获取此[^"'],然后将其与以下*合并,并尝试匹配任何字符,但不匹配'"零次或多次。如果它找到双引号,则第一个模式[^"']失败,正则表达式引擎选择下一个"[^"]*"。此模式将匹配"foo""bar"等字符串。如果它找到'符号,则控件转移到第三个模式'[^']*'。因此,如果它们出现,它只匹配正确引用的字符串。

答案 1 :(得分:0)

(?'compositeMiddle'[^"].*)

[abc]模式是匹配字符的集合,^可以否定它。