我目前的判断力:
([\d]*)([^\d]*[\d][a-z]*-[\d]*)([\d][a-z?])(.?)对,所以我试图让regex匹配一个字符串:一个计数,可以是从0到1百万的任意数量的数字,然后跟着一个数字,有时是一个字母,然后是任何数字,后面跟着相同的数字,有时是字母,有时是字母。它应该匹配的字符串示例:
1921-1220104081741b
192123212a-1220234104081742ab基于上面的例子它应该返回什么(这是两个例子,它不应该同时读两行)。
(192) (1-122010408174) (1) (b)
(19212321) (2a-122023410408174) (2a) (b)我的当前正则表达式适用于第二个正则表达式,但当我希望它返回(1) (b)时,它在第一个正则表达式中返回(1b),但在第二个正则表达式中返回(2a),或者返回(2a):
1926h-1220104081746h Should Return: (192) (6h-122010408174) (6h)不是百分之百确定如果可能,感觉我是相当新的regex。作为参考,我正在excel中做这件事,如果有其他更简单的方法的话。
发布于 2015-12-15 18:02:59
您可以在破折号字符之前捕获字符,然后返回匹配的引用。
在下面的表达式中,\3将匹配第三个捕获组所匹配的内容:
(\d*)((\d[a-z]*)-\d*)(\3)([a-z])?

合并捕获组后的输出:
1921-1220104081741b
(192) (1-122010408174) (1) (b)192123212a-1220234104081742ab
(19212321) (2a-122023410408174) (2a) (b)1926h-1220104081746h
(192) (6h-122010408174) (6h)示例:
别管JS了。以下是合并捕获组后的输出:
var strings = ['1921-1220104081741b', '192123212a-1220234104081742ab', '1926h-1220104081746h'], exp = /(\d*)((\d[a-z]*)-\d*)(\3)([a-z])?/;
strings.forEach(function(str) {
var m = str.match(exp);
snippet.log(str);
snippet.log('(' + m[1] + ') ('+ m[2] + ') (' + m[4] + ') (' + (m[5]||'') + ')');
snippet.log('---');
});<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
发布于 2015-12-15 18:36:58
我想你所说的“后面跟着同样的数字”的意思是,在短跑之前的那一段被重复,作为你的第三个捕获组。我建议通过拆分第二个捕获组,然后使用反向引用来实现这一点:
([\d]*)([\d][a-z]*)-([\d]*)(\2)(.?)关于你的三个例子:
1921-1220104081741b
192123212a-1220234104081742ab
1926h-1220104081746h这导致:
(192) (1) - (122010408174) (1) (b)
(19212321) (2a) - (122023410408174) (2a) (b)
(192) (6h) - (122010408174) (6h) ()...and你可以加入两个中间组一起得到你想要的连字符术语。
https://stackoverflow.com/questions/34296076
复制相似问题