我正在努力编写一个与perl兼容的正则表达式,这个正则表达式在区分引用刚果共和国和刚果民主共和国的字符串方面将相当聪明。我将在R的grep函数的程序中使用这个表达式,如果正则表达式与字符串匹配,否则返回True。
我感兴趣的国家有时可以用不同的顺序/方式书写。例如:
刚果
共和国
刚果共和国
刚果共和国
刚果共和国
我不想与之相匹配的国家也有类似的模式:
democratic republic of the congo
congo, democratic republic of the
dem rep of the congo我想,我要找的是一个在rep和刚果上匹配的正则表达式,但是在字符串中有一个"dem“的时候,它就会失败。
有什么想法吗?谢谢!
发布于 2012-06-01 17:20:07
这与您的第一个示例字符串匹配,并忽略第二个示例字符串。
^(.(?<!dem))*congo(.(?<!dem))*$在Perl中,这变成
if ($subject =~ m/^(.(?<!dem))*congo(.(?<!dem))*$/m) {
# Successful match
} else {
# Match attempt failed
}发布于 2012-06-01 17:20:20
> countries <- scan(what="character")
1: 'republic of congo'
2: 'republic of the congo'
3: 'congo, republic of the'
4: 'congo, republic'
5: 'democratic republic of the congo'
6: 'congo, democratic republic of the'
7: 'dem rep of the congo'
8:
Read 7 items
> grep("dem", countries, ignore.case=TRUE,value=TRUE, invert=TRUE)
[1] "republic of congo" "republic of the congo" "congo, republic of the" "congo, republic" 发布于 2012-06-01 17:25:23
我不知道R,但是这个正则表达式将与您所描述的完全匹配,一个在rep和congo__上匹配的正则表达式,但是在字符串中任何时候都会失败
/^(?=.*rep)(?=.*congo)(?!.*dem)/i;它还可以根据需要对示例字符串进行筛选。
https://stackoverflow.com/questions/10854603
复制相似问题