如何从正则表达式中排除特定模式?

时间:2014-02-19 09:23:44

标签: c# regex string

我对正则表达式有点麻烦。我有以下字符串模式

  
      
  1. “Emily Watson(abril de 1897-)”
  2.   
  3. “Emaa William(加利福尼亚州)”。
  4.   

我需要写一个正则表达式,它应该从第一个字符串中提取“Emily Watson”,从第二个字符串中提取“Emaa William(california)”整个字符串。

基本上我的正则表达式应该省略文本和大括号,如果它符合以下模式“月份年”。 到目前为止我已经尝试了

(?'NAME'[\w]+\s*[\w]+\s*\([\w]+(?![\w]+\s*de\s*\d{4}-)\))

在上面的正则表达式适用于第二个字符串,即“ Emaa William(加利福尼亚州)” 但我的第一个字符串“Emily Watson(abril de 1897 - )” 无效

对于“Emily Watson(abril de 1897-)”,我没有得到名字,即Emily Watson。

任何人都可以帮我解决如何排除问题的第一个字符串。

2 个答案:

答案 0 :(得分:2)

试试这个:

(?<NAME>.+\s\(\w+\)|.+\s(?=\(\w+\sde\s\d{4}-\)))

返回

Emily Watson 
Emaa William (california)

答案 1 :(得分:1)

您应该将负面前瞻与匹配交换。

(?'NAME'[\w]+\s*[\w]+\s*\((?![\w]+\s*de\s*\d{4}-)[\w]+\))

这样,首先你要检查括号之间是否有month de year模式,然后匹配括号之间的 ,而你的版本首先将所有内容与最后一个括号匹配,然后然后检查剩下的位中是否没有month de year