我对正则表达式有点麻烦。我有以下字符串模式
- “Emily Watson(abril de 1897-)”
- “Emaa William(加利福尼亚州)”。
醇>
我需要写一个正则表达式,它应该从第一个字符串中提取“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。
任何人都可以帮我解决如何排除问题的第一个字符串。
答案 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
。