我正在尝试创建一个正则表达式来匹配某些特定字符,除非它们出现在另一个字符中。
例如,我想匹配abc或xxabcxx但不匹配tabct或txxabcxt。
虽然像tabctxxabcxxtabcxt这样的东西我想要匹配中间abc而不是其他两个。
目前我正在尝试使用Java,如果它改变了什么。
答案 0 :(得分:1)
试试这个:
String s = "tabctxxabcxxtabcxt";
Pattern p = Pattern.compile("t[^t]*t|(abc)");
Matcher m = p.matcher(s);
while (m.find())
{
String group1 = m.group(1);
if (group1 != null)
{
System.out.printf("Found '%s' at index %d%n", group1, m.start(1));
}
}
输出:
Found 'abc' at index 7
t[^t]*t
会消耗t
中包含的所有内容,因此,如果第二个备选方案中的(abc)
匹配,则您知道它是您想要的那个。
答案 1 :(得分:0)
EDITED!之前有点不对劲。
哦,这个比我想象的更难。真棒。使用相当标准的语法:[^t]{2,}abc[^t]{2,}
这将捕获xxabcxx但不捕获abc,xabc,abcx,xabcx,xxabc,xxabcx,abcxx或xabcxx。也许最好的办法是:
if 'abc' in string:
if 't' in string:
return regex match [^t]{2,}abc[^t]{2,}
else:
return false
else:
return false
这对你的意图是否足够?