【问题标题】:regex: literal followed by one or more digit正则表达式:文字后跟一个或多个数字
【发布时间】:2018-06-20 06:57:50
【问题描述】:

我想搜索文字 US 后跟一个数字,该数字重复一次或多次,后跟除破折号以外的任何内容。例如,这些应该匹配:

US3.
US22?
US134!

虽然这些没有

US5-
US66-
US789-

我试过了

r'US[0-9]+(?=[^-])'

但它也匹配

'US6', 'US78'

如何修改?

【问题讨论】:

  • 什么包括任何东西
  • 这个列表 [?, !, &, %, .]
  • 那么它不是任何东西;这是您提供的清单。因此,请在您的帖子中指定该列表。
  • 稍微建立在 Rahul 的评论基础上,US78 是文字 US ("US"),后跟一个重复一次或多次的数字 ("7"),后跟除破折号 (" 8")。因此,我认为您可能需要更清楚地了解您想要从正则表达式中获得的确切信息 - anything 是否有任何标点符号?除了数字还有什么?等
  • 对不起,我明白了。我想我的意思是,文字后面可以跟任何数字(不指定其位数),只要后面不跟破折号。

标签: regex


【解决方案1】:

在字符类中匹配数字后提及字符列表。

正则表达式: US\d+[?!&%.]

Regex101 Demo

【讨论】:

  • 你知道下一个章程将在[?!&%.]吗? OP 建议它可以是不是 - 的任何东西。
  • @AaronN.Brock:OP 在评论中提到了它。
  • 哦,我现在明白了...好吧,有了这些信息,您的答案就更简洁了。投赞成票!
【解决方案2】:

我不确定这是否是绝对的最佳方法,但如果您知道每行只有一个,您可以添加$像这样的积极前瞻:

US[0-9]+(?=[^-]$)

Regexr.com example

【讨论】:

    【解决方案3】:

    您必须提及允许的字符类中的字符列表。

    我已经附上了输出的截图,你可以验证一下!

    US[0-9]+[?!&%.]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-18
      • 2019-08-14
      相关资源
      最近更新 更多