【问题标题】:regex to find a string contains words with both letters and digits正则表达式查找包含字母和数字的单词的字符串
【发布时间】:2020-05-12 19:00:46
【问题描述】:

我正在尝试编写一个正则表达式来查找包含字母和数字的单词的字符串(不检查字母,因为单词应该严格包含字母和数字)。

我想出了这个^(?=.*[a-zA-Z])(?=.*[0-9])

这是上述正则表达式的链接:https://regex101.com/r/Y97ykL/1

上面的正则表达式适用于像下面这样的简单场景

  1. a1b4cc -> true(包含字母和数字)

  2. abc -> false(仅包含字母)

  3. 123 -> false(仅包含数字)

但是上面的正则表达式我无法涵盖的场景很少。 我怎样才能更新我上面的正则表达式也适用于下面的例子?

  1. abc d77hv -> 真(因为efg123 包含字母和数字)

  2. 798 h7ghd -> 真(因为h7ghd 包含字母和数字)

  3. 798 abcd -> False(因为没有包含字母和数字的单词)

我对正则表达式不太熟悉,但是是否可以编写一个正则表达式来检查上述场景,而无需遍历字符串中的每个单词? 感谢您的帮助!

【问题讨论】:

  • 抱歉,倒数第二段的整个内容我都无法理解。
  • 我更新了示例。现在更清楚了吗? @MichaelButscher
  • 试试^(?=.*\b(?=\S*[a-zA-Z])(?=\S*[0-9]))regex101.com/r/Y97ykL/2
  • @MichaelButscher:哇,这太棒了。非常感激。您想将此添加为答案吗?

标签: python regex pattern-matching


【解决方案1】:

正则表达式^(?=.*\b(?=\S*[a-zA-Z])(?=\S*[0-9])) 可以按需要工作。它试图(通过前瞻)找到一个单词边界(\b),之后可以找到所请求的字母和数字的混合。

因为原始的正则表达式也只匹配行首的零个字符,所以这个正则表达式的行为方式相同。

【讨论】:

    【解决方案2】:

    尝试在一行中找到一个字母和一个数字或一个数字和一个字母。

    ^((.*[0-9]+)[a-zA-Z]+.*)|((.*[a-zA-Z]+)[0-9]+.*)$
    

    查看示例:https://regex101.com/r/Y97ykL/3

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-30
      • 2021-08-10
      • 1970-01-01
      相关资源
      最近更新 更多