我正在为 ISBN 解析一些搜索查询文本。每行可能包含零个或多个 ISBN10、零个或多个 ISBN13 以及其他不相关的数字。文本已被净化为仅包含 [a-zA-Z0-9 ]
,但相关数字之间可能有空格。我已经成功编写了一些正则表达式片段来解析文本,但我不确定如何让它们按照我想要的顺序执行。
首先,这是来自数据的示例文本行:
foo ISBN10 013 284 1649 0132841648 Web ISBN13 9 78013 2841641 9780132841641 2013 bar
我需要(按此顺序):
- 在整个字符串中搜索
([9][7][8-9]\d{10})
。 - 仅搜索尚未匹配的内容
(\d{10})
- 仅搜索尚未匹配的内容
([9]\s*[7]\s*[8-9]\s*(\s*\d ){10})
- 仅搜索尚未匹配的内容
(\d(\s*\d){9})
这完成了搜索完整的 ISBN13,然后是完整的 ISBN10,然后是碎片化的 ISBN13,最后是碎片化的 ISBN10。但是,如果我简单地将它们粘贴在一起,用 |
分隔,RegEx 引擎会为每个字符计算 (1,2,3,4)。在考虑评估 #2 之前,我如何在整个字符串中搜索表达式 #1?
最佳答案
执行四次 replaceAll
并在每一步中删除成功的匹配项(即,将它们替换为 ""
)。
关于regex - 在 RegEx 中强制执行匹配顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33884072/