【问题标题】:Java splitting string by custom regex matchJava通过自定义正则表达式匹配拆分字符串
【发布时间】:2010-04-01 05:32:31
【问题描述】:

我对正则表达式完全陌生,所以我在这里寻求一些帮助。

我在 JDK 1.5 下编译

以我从标准输入中读取的这一行为例:

ab:Some string po:bubblegum

我想做的是用两个字符和冒号分隔。也就是说,一旦将行拆分并放入字符串数组,这些应该是术语:

ab:Some string
po:bubblegum

我现在有这个正则表达式:

String[] split = input.split("[..:]");

这会在 处拆分分号;我想要的是它匹配两个字符和一个分号,但在开始之前在空格处拆分。这甚至可能吗?

这是字符串数组的输出:

ab
Some String po
bubblegum

我也读过 Pattern.compile()。这是我应该考虑的事情吗?

【问题讨论】:

    标签: java regex split


    【解决方案1】:
    input.split(" (?=[A-Za-z]{2}:)")
    

    ?= 创建一个positive lookahead。这意味着引擎会提前查看下一部分是否匹配,而不会消耗该部分。如果匹配,则在空格字符上拆分。 [A-Za-z] 表示一个大写或小写字母,而{2} 指定我们想要两个匹配该类的字符。

    【讨论】:

    • 速度很快的人——效果很好。谢谢一堆。你能解释一下它是如何工作的吗?我可以理解它正在寻找两个大写或小写字符,然后是一个冒号,但就是这样。太好了,再次感谢。
    【解决方案2】:

    您询问了Pattern#compile(String pattern)。如果您打算大量使用正则表达式,则应该考虑使用它,因为上述方法会将正则表达式编译成可以快速执行的东西,而直接使用String#split(String regex) 总是重新编译正则表达式。

    【讨论】:

    • 好的,谢谢。我刚刚使用 Matthew 的正则表达式实现了它,它仍然有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    • 2018-09-25
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    相关资源
    最近更新 更多