【问题标题】:Regex find word contain specific char正则表达式查找包含特定字符的单词
【发布时间】:2014-12-04 22:40:45
【问题描述】:

我想一次性找出所有包含字符'的单词。

例如:

'dog
dog'
do'g

我写了^.*'.*

但它不起作用。

【问题讨论】:

    标签: python regex


    【解决方案1】:

    您不需要正则表达式,只需:

    return your_string.count("'") == 1
    

    或者如果你坚持在你的模块中导入re:

    import re
    return len(re.findall("'", my_string)) == 1
    

    【讨论】:

      【解决方案2】:
      import re
      p = re.compile(r'^[^']*'[^']*$', re.IGNORECASE | re.MULTILINE)
      test_str = "'dog\ndog'\ndo'g"
      
      re.findall(p, test_str)
      

      它确实有效。请看这里。

      http://regex101.com/r/yR3mM3/52

      你也可以试试

      ^(?=[^']*'[^']*$).*$
      

      这使用前瞻来查找'。

      【讨论】:

      • 这也会找到带有多个撇号的字符串。您必须指定“非撇号”,例如 ^[^']*'[^']*$。
      • @omertalmi 你能说明哪个案例失败了
      【解决方案3】:

      你可以用下面的正则表达式来做到这一点。

      ^(\w*'{1}\w*)$
      

      匹配

      'dog
      dog'
      do'g
      

      不匹配

      dog
      do''g
      ''dog
      'dog'
      dog''
      

      看看Regex demo。

      【讨论】:

        【解决方案4】:

        这样:

        >>> import re
        >>> re.findall(r"(?<![\w'])(?:\w+'\w*|'\w+)(?![\w'])", "'dog cat dog' m'a'ow do'g")
        

        (?&lt;![\w']) 是一个否定的lookbehind,检查之前没有单词字符或引号。 (?![\w']) 是一个否定的前瞻,检查后面没有单词字符或引号。

        所以这些测试确保只有一个报价。

        more about lookaround

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-07
          • 1970-01-01
          • 2022-08-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多