正则表达式两位数配对

时间:2017-11-15 16:22:32

标签: regex

我使用以下正则表达式来查找数字对; [0-9][0-9]

如果字符串是偶数长度,我会得到我想要的。

string x ="1234";
Regex.Matches(enc, @"[0-9][0-9]")

使用正则表达式,我得到1234

如果我string x="12345"我得到1234。如果我需要2345,如何修改此项?

2 个答案:

答案 0 :(得分:1)

就这样做:

([0-9]{2})+$

这将匹配所有对,除非你有一个奇数位数,在这种情况下你将匹配除第一个数字以外的所有数字。如果您需要单独的对,则可以将返回的匹配拆分为顺序对。

实例:https://regex101.com/r/3gNoQd/4

答案 1 :(得分:1)

此答案使用您在问题下方的评论中输入的输入(有关输入,请参阅结果部分)

代码

由于我不确定输出应该是什么,我将向您介绍以下3种方法。

方法1

此方法始终确保从字符串末尾匹配对。

See regex in use here

\d{2}(?=(?:(?:\d{2})+|)(?:\D|$))

方法2

此方法始终确保仅在特定标记跟随数字

时才从字符串末尾匹配对

See regex in use here

\d{2}(?=(?:\d{2})+\[|\[)

方法3

此方法始终确保只有当特定标记跟随数字并且通常(但也成对)匹配剩余数字时,才会从字符串末尾匹配对。

See regex in use here

\d{2}(?=(?:\d{2})+\[|\[)|\d{2}(?=\d*$)

结果

输入

12345[FNC1]00112233
12345[FNC1]0011223

输出

方法1

23 45 00 11 22 33
23 45 01 12 23

方法2

23 45
23 45

方法3

23 45 00 11 22 33
23 45 00 11 22

说明

方法1

  • \d{2}匹配任意数字两次
  • (?=(?:\d{2})+\b|\b)确定以下任何一项匹配的积极前瞻
    • (?:\d{2})+\b符合以下条件
      • (?:\d{2})+匹配以下一次或多次
        • \d{2}匹配任意数字两次
      • \b将该位置置为单词边界
    • \b将该位置置为单词边界

方法2

方法1 的解释相同,但不使用\b,而是使用\[断言以下字符与[匹配字面上。

方法3

方法2 的解释相同,但最后添加|\d{2}(?=\d*$)

  • |的作用类似于布尔值OR(匹配方法2 或以下内容)
  • \d{2}匹配任意数字两次
  • (?=\d*$)确定后续匹配的正向前瞻
    • \d*任意次数匹配
    • $断言行尾的位置