【问题标题】:Regular Expressions (RegEx) - One String Variable length正则表达式 (RegEx) - 一个字符串可变长度
【发布时间】:2013-06-25 20:51:22
【问题描述】:

我的应用程序收到一个长度可变的条形码。它可能是 5、9、12 或 14。我正在尝试使用这样的东西:\w{14}|\w{12}|\w{9}|\w{5}

那个正则表达式不正确。是否有不同长度的正则表达式? 或者组合不同正则表达式的正确方法是什么?

注意:我使用正则表达式的原因由来已久。

【问题讨论】:

  • "那个正则表达式不正确,"有什么问题?
  • 您想要完成什么,为什么您的解决方案不起作用?
  • 边界问题?试试:^\w{14}|\w{12}|\w{9}|\w{5}$.
  • Prag,它将查找开头 14 个字符、12 或 9 个字符或结尾 5 个字符的内容。

标签: c# .net regex


【解决方案1】:

这是你要找的吗?

\b(\w{14}|\w{12}|\w{9}|\w{5})\b

它将匹配字符串中长度为 14、12、9 或 5 个字符的所有单词。然后,您可以检查这些匹配项。在此处查看包含多个匹配项和不匹配项的字符串:http://www.debuggex.com/r/V9T8nHp7ep6yuJow

如果您只希望检查整个字符串是否为单个匹配项,请使用它(检查它是否以您的选项之一开始和结束):

^(\w{14}|\w{12}|\w{9}|\w{5})$

另外,我看到的所有条形码都只包含数字,你也是这种情况吗......你应该用\d替换所有\w,这与[0-9]相同

【讨论】:

  • 如果字符串中有空格,这可能会失败。例如:“abc 12345”可能“匹配”,但我怀疑这就是原始海报的意图。
  • 假设你得到的字符串是整个条形码,我建议你使用 ^$ 方法,因为这种方法将匹配 "djd 12345 ,,," 因为 12345 是 5 位数字并且会匹配 \w{ 5} 并且在单词边界内。
  • 是的,12345 将是字符串中的匹配项。用户可以查看测试字符串中的匹配项 - 如上面链接中的示例。我想我不确定用户打算如何实现正则表达式——这可能会改变要求。
【解决方案2】:

你很可能想要这个:

"^(\w{14}|\w{12}|\w{9}|\w{5})$"

注意不同长度选项的分组,由字符串指示符的开头和结尾包围。没有这些,如果\w{5} 存在于字符串中的某处,则任何内容都匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 2016-11-15
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    相关资源
    最近更新 更多