正则表达式 - 如果第一个数字是1则返回1但是如果它是145则返回145但是如果它的133返回133

时间:2015-08-11 20:50:07

标签: regex

这是我的正则表达式demo

正如问题所述:

如果第一个数字是1则返回1但是如果它是145则返回145但是如果它的133返回133

示例数据a:

K'8134567
K'81345678
K'6134516789
K'61345678
K'643456
K'646345678
K'1234567890
K'12345678901
K'1454567890    <<<--- want 145 returned and not 1 
K'13345678901   <<<--- want 133 returned and not 1 
K'3214567890123
K'32134567890123
K'3654567890123
K'8934567890123
K'6554567890123

regex exprtession:

K'(?|(?P<name1>81)\d+|(61)\d+|(64)\d+|(1)\d+|(44)\d+|(86)\d+|(678)\d+|(41)\d+|(49)\d+|(33)\d+|(685)\d+|(\d{1,3})\d+)

正则表达式解释道:

我对K'后的数字感兴趣 我希望使用正则表达式进行此操作但不确定是否可以完成。
我想要的是:
如果数字从81开始返回81
如果数字从61开始返回61
... 如果号码以我不感兴趣的东西开头(或者它的第一个数字1-3)

以上标准有效:

但我的问题是如何执行以下操作:
如果第一个数字为1则返回1但是 如果第一个数字是1而第二个和第三个数字是45则返回145并且不返回仅1 如果第一个数字是1而第二个和第三个数字是33则返回133并且不返回1

我认为我必须在正则表达式|(1)\d+|

的这一部分中加入一些内容

Som其他问题供我自己参考: 正则表达式是否首先对数据进行排序? 正则表达式搜索的顺序对于它的实现方式是否重要?我真的不想要这个。

3 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式:

K'(?P<name1>81|61|64|44|86|678|41|49|33|685|1(?:33|45)?|\d{2,3})\d+

Updated RegEx Demo

答案 1 :(得分:1)

尝试:

K'(?|(?P<name1>81)\d+|(61)\d+|(64)\d+|(1(?:45|33)?)\d+|(44)\d+|(86)\d+|(678)\d+|(41)\d+|(49)\d+|(33)\d+|(685)\d+|(\d{1,3})\d+)

DEMO

答案 2 :(得分:0)

除了正则表达式的顺序很重要之外,正则表达式并不排序,实际上基于你的正则表达式引擎它会有所不同但是由于大多数正则表达式引擎使用传统NFA来解析字符串,所以顺序很重要。< / p>

在这种情况下,您可以简单地按照正则表达式将其添加到正则表达式中:

(?<=K')1(?:45|33)?

请参阅演示https://regex101.com/r/rT2yJ0/1