gpt4 book ai didi

regex - 正则表达式匹配难度

转载 作者:行者123 更新时间:2023-12-02 01:58:00 24 4
gpt4 key购买 nike

我当前的正则表达式:

([\d]*)([^\d]*[\d][a-z]*-[\d]*)([\d][a-z?])(.?)

是的,所以我试图使正则表达式匹配基于以下内容的字符串:一个计数,可以是 0-100 万之间的任意数量的数字,然后后跟一个数字,有时是一个字母,然后 - 然后是任何数字,后跟相同的数字数字,有时是字母,有时是字母。它应该匹配的字符串示例:

1921-1220104081741b
192123212a-1220234104081742ab

基于上述内容应返回的示例(这是不应读取两行的 2 个示例。)

(192) (1-122010408174) (1) (b)
(19212321) (2a-122023410408174) (2a) (b)

我当前的正则表达式适用于第二个,但当我希望它返回 (1) (b) 时,它在第一个中返回 (1b),但在第二个或情况下也返回 (2a) :

1926h-1220104081746h  Should Return: (192) (6h-122010408174) (6h)

不是 100% 确定是否可能,感觉我对正则表达式相当陌生。作为引用,如果有其他方法可以更轻松地完成此操作,我将在 excel-vba 中执行此操作。

最佳答案

您可以捕获破折号字符之前的字符,然后向后引用该匹配项。

在下面的表达式中,\3 将匹配第三个捕获组所匹配的内容:

(\d*)((\d[a-z]*)-\d*)(\3)([a-z])?

Example Here

enter image description here

合并捕获组后的输出:

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>

关于regex - 正则表达式匹配难度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34296076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com