我正在尝试在匹配每个子字符串的正则表达式中编写一个组,除了那些以“”开头的'
我的正则表达式的长篇故事是:以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'。*?)匹配所有内容。我想让它匹配除了以“
开头的子串之外的所有内容答案 0 :(得分:1)
好像你想要这样的东西,
^[A-Z][a-z]+\s[A-Z][a-z]+(?:[^"']|"[^"]*"|'[^']*')*?\b\d{10}$
(?:[^"']|"[^"]*"|'[^']*')*?
首先,正则表达式引擎获取此[^"']
,然后将其与以下*
合并,并尝试匹配任何字符,但不匹配'
或"
零次或多次。如果它找到双引号,则第一个模式[^"']
失败,正则表达式引擎选择下一个"[^"]*"
。此模式将匹配"foo"
,"bar"
等字符串。如果它找到'
符号,则控件转移到第三个模式'[^']*'
。因此,如果它们出现,它只匹配正确引用的字符串。
答案 1 :(得分:0)
(?'compositeMiddle'[^"].*)
[abc]
模式是匹配字符的集合,^
可以否定它。