【问题标题】:Regex to ignore alphanumeric characters in a string正则表达式忽略字符串中的字母数字字符
【发布时间】:2021-03-18 17:38:32
【问题描述】:

我有一个正则表达式,它目前检查成员编号是否存在于长度在 6 到 9 之间的字符串中

(?<memberNo>[0-9]{6,9})

我需要的是,如果我得到输入 123a456,正则表达式会忽略存在 6 到 9 之间的连续 int 值的任何字母数字字符。

例如,这些都应该匹配

123456
a123456
123a456
12345a6

【问题讨论】:

  • 为什么不先去掉所有非数字再匹配
  • 添加可选的字母匹配模式,(?&lt;memberNo&gt;(?:[a-zA-Z]?[0-9]){6,9})(?&lt;memberNo&gt;(?:[a-zA-Z]*[0-9]){6,9})

标签: regex


【解决方案1】:

好像

(?<memberNo>[0-9a-z]{6,9})

将匹配您的所有目标字符串。但是,这种模式允许字符串不包含数字字符。

要强制一个或多个数字字符,可以使用positive lookahead

(?<memberNo>(?=.*[0-9])[1-9a-z]{6,9})

(?=.*[0-9]) 部分是正向前瞻。

你可以在这里测试这个正则表达式https://regexr.com/5oua2

【讨论】:

    【解决方案2】:

    您可以允许使用数字之间的任何字母

    (?<memberNo>(?:[a-zA-Z]?[0-9]){6,9})
    

    请参阅regex demo

    详情

    • (?: - 非捕获组的开始:
      • [a-zA-Z]? - 一个或零个 ASCII 字母
      • [0-9] - 单个 ASCII 数字
    • ){6,9} - 小组结束,重复六到九次。

    regex graph

    【讨论】:

    • (?(?:[a-zA-Z]*?[0-9]){6,9}) 是我最终使用的,但这让我非常接近我需要什么谢谢
    猜你喜欢
    • 2018-05-14
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 2015-06-25
    • 2018-07-30
    相关资源
    最近更新 更多