如何改进这个Java正则表达式?

时间:2014-12-17 00:30:51

标签: java android regex

我有三种格式的文字:

  1. Dan 3:52-56
  2. 使徒行传6:8-10,7:54-59
  3. 2 Sam 15:13-30,16:5-13
  4. 理想情况下,我希望能够提取所有,例如Dan,3,5,5和56在任何情况下,我目前有:

    /(\S*)\s(\d*):(\d*)-(\d*)($|,\s(\d*):(\d*)-(\d*))/gmix
    

    ..哪个有效,但不能很好地捕捉第二个案例。是否有更好/更有效的方法来做到这一点?

2 个答案:

答案 0 :(得分:1)

试试这个:((?:\d*\s)?(?:\S*))\s(\d*):(\d*)-(\d*)(?:,\s(\d*):(\d*)-(\d*))?或作为java字符串:"((?:\\d*\\s)?(?:\\S*))\\s(\\d*):(\\d*)-(\\d*)(?:,\\s(\\d*):(\\d*)-(\\d*))?"

好的,只是编辑了所以' 2 Sam'将在同一组

注意:然而,最好的方法是知道输入字符串中每个元素的确切规范(如果可能的话),而不是只使用3种可能性。

答案 1 :(得分:0)

这个怎么样:

([\w ]+) (?:(?:(\d+?):(\d+?)\-(\d+))(?:, )?)*

只有/g(全局)修饰符?

这是一个带有解释的regex101:https://regex101.com/r/pP5pY3/1