使用RegEx获取字符串的第二部分

时间:2010-08-02 14:07:32

标签: regex

我有这样的字符串“first#second”,我想知道如何在没有“#”符号的情况下获得“第二”部分作为RegEx的结果,而不是使用括号进行匹配捕获

upd:我忘了在字符串的末尾添加一个特殊的字符串,真正的字符串是“first#second *”

5 个答案:

答案 0 :(得分:5)

如果你必须使用正则表达式,并坚持不使用捕获组,你可以使用lookbehind支持它们的风格:

(?<=#).*

或者除了#之外,您还可以捕获字符串末尾的任何内容,如下所示:

[^#]*$

捕获组选项当然是:

#(.*)
 \__/
   1

这也与#匹配,但第1组会捕获您想要的部分。

最后,非正则表达式可能看起来像这样:

secondPart = wholeString.substring( wholeString.indexOf("#") + 1 )

如果#也可能出现(可能已转义)字符串中的任何其他位置,则某些解决方案可能会出现问题。

参考

答案 1 :(得分:4)

简单的正则表达式:

/#(.*)$/

如果你真的不希望它成为匹配捕获,并且你知道字符串中有#,但你想要的部分中没有#,你可以做到

/[^#]*$/

整个正则表达式都是你想要的。

答案 2 :(得分:2)

/[a-z]+#([a-z]+)/

答案 3 :(得分:2)

您可以使用环视来排除表达式的某些部分。

http://www.regular-expressions.info/lookaround.html

答案 4 :(得分:1)

如果你使用java那么

你可以考虑使用Pattern&amp;匹配课。 Pattern为您提供正则表达式的编译优化器版本。 Matcher提供了完整的RE匹配内部。

Pattern.match&amp; String.spilt给出相同的结果,其中第一个是分区更快。

例如)

String s = "first#second#third";
String re = "#";
Pattern p = Pattern.compile(re);
Matcher m = p.matcher();
int ms = 0;
int me = 0;
while( m.find() ) {
    System.out.println("start "+m.start()+" end "+ m.end()+" group "+m.group());
    me = m.start();
    System.out.println(s.substring(ms,me));
    ms = m.end();
}

如果其他语言你可以考虑使用反向引用&amp;团体也。如果你发现任何重复。