我正在尝试提取由连字符
分隔的字符串的两边abc - def
目前我有
([^-]*)-([^-]*)
匹配1为abc
,匹配2为def
。
有没有更优雅的方式来编写这个正则表达式,以便没有重复元素?即([^-]*)
不重复两次。
答案 0 :(得分:1)
答案 1 :(得分:1)
只需使用[^-]+
并迭代结果。
Java中的插图:
// yours
Matcher m1 = Pattern.compile("([^-]*)-([^-]*)").matcher("abc - def");
if (m1.find()) {
System.out.println(m1.group(1));
System.out.println(m1.group(2));
}
// mine
Matcher m2 = Pattern.compile("[^-]+").matcher("abc - def");
while (m2.find()) {
System.out.println(m2.group());
}
输出相同。
答案 2 :(得分:0)
你可以匹配(.*)-(.*)
,连字符仍然必须匹配,因此它会分割2个表达式。
顺便说一句,您可以尝试在此类网站上进行在线检查 - http://regexpal.com/
答案 3 :(得分:0)
如果您的正则表达式更复杂,您可以将其拆分为更小的块,然后重复使用它们。
对于您的示例,这可能看起来像这样(Java):
String side = "([^-]*)";
String regex = side + "-" + side;
然而,虽然这对重复的复杂正则表达式很有用(想想电子邮件验证等),但在你的情况下,重复的版本是完全可以的。
您可以使用([^-]*)-\1
来引用之前组中匹配的内容,但这只会在双方相等时匹配,而不是匹配相同的模式,即,它匹配"abc-abc"
,但不匹配"abc-def"
。
答案 4 :(得分:0)