我有三种格式的文本:
- 但 3:52-56
- 使徒行传 6:8-10、7:54-59
- 2 撒母耳记 15:13-30, 16:5-13
理想情况下,我希望能够提取所有组,例如Dan,3、52 和 56 在任何情况下,我目前有:
/(\S*)\s(\d*):(\d*)-(\d*)($|,\s(\d*):(\d*)-(\d*))/gmix
..它有效,但不能很好地捕获第二种情况。有没有更好/更有效的方法来做到这一点?
最佳答案
试试这个:((?:\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 种可能性。
关于java - 如何改进这个 Java 正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27516470/