使用正则表达式从字符串中获取数字对
Posted
技术标签:
【中文标题】使用正则表达式从字符串中获取数字对【英文标题】:Get pairs of digit from string with regexp 【发布时间】:2014-06-03 04:17:36 【问题描述】:我发现了类似的问题Regular expression to match sets of numbers that are not equal nor reversed,但我的正则表达式很糟糕,所以需要一个建议。 我有字符串,即:3344654865,我需要知道第一个字符是两个不相等的对。 我试过这个正则表达式
^(?:(\d)(?:\1)(\d)(?:\2))
但它只捕获一对中的第一个数字
1. [0-1] `3`
2. [2-3] `4`
在示例 3344654865 中,它应该捕获两对数字,其中对内的数字等于 3=3 和 4=4。 如何升级我的正则表达式,它将从字符串的开头返回两个不相等的对?
【问题讨论】:
这个例子你想要的输出是什么? 【参考方案1】:这对我有用^((\d)\2)(?!\1)(\d)\3.*
匹配第一个字符是两个不相等的对Demo
更新:每个请求 ^((\d)\2)(?!\1)((\d)\4)
所需的匹配都没有。 1 & 3Demo
如果匹配必须是 1 和 2,则使用以前的模式之一来验证它是否符合您的标准,然后应用此模式 ^(\d\d)(\d\d)
【讨论】:
哦,它有可能返回 1.33
2.44
而不是 1.33
2.3
3.4
吗?
^((\d)\2)(?!\1)((\d)\4)
使用匹配#1 & 3【参考方案2】:
^((\d)\2)(?!\1)((\d)\4)
结果:
3344654865 -> (33, 3, 44, 4)
12345 -> fail (digits not same in pairs)
9 -> fail (too short)
3333 -> fail (two pairs same)
很难消除一个字符的中间组,因为反向引用需要它们。
【讨论】:
它确实有效,说它不匹配 (33 -> fail, 34 -> 34, 345 -> 34),根据您的规范(“我需要知道第一个字符是两个不相等的对")。否则我不明白你的问题;请指定所需的输入和所需的输出。 输入:3344654865 所需输出:3344 抱歉我的解释不好 输入 3737 的输出是什么? 12345怎么样? 9 点呢? 在 3737 的例子中应该被跳过。我试图得到第一个和第二个数字相等的对,即 55、77 等。 为什么不完全回答这个问题?12345
是否有效?成对的数字是否应该相同(如33
、44
),还是在您的情况下只是巧合,因为它没有明确列出,除非在您声明的代码示例中不起作用?我认为是的,但是对于未来,您需要为正则表达式匹配编写几个案例,以涵盖所有情况,而不仅仅是您正在考虑的理想情况。【参考方案3】:
这个:
^(\d+?)(?!\1)(\d+)
会给你:
33 - 44654865
使第二部分的长度相同并非易事,但保证第二部分的第一个数字与第一个不一样。所以你必须自己去拿。
不是微不足道的,我的意思是你需要用交替或循环尝试 1 位、2 位、3 位等等。
【讨论】:
以上是关于使用正则表达式从字符串中获取数字对的主要内容,如果未能解决你的问题,请参考以下文章