【问题标题】:Simple Python Regex Find pattern简单的 Python 正则表达式查找模式
【发布时间】:2010-02-14 04:08:53
【问题描述】:

我有一句话。我想找到该句子中以特定字符开头的所有单词。我对编程和 Python 很陌生,但据我所知,这听起来像是一个正则表达式问题。

什么是模式匹配代码,可以让我找到与我的模式匹配的所有单词?

非常感谢,

布洛克

【问题讨论】:

    标签: python regex


    【解决方案1】:
    import re
    print re.findall(r'\bv\w+', thesentence)
    

    将打印句子中以'v' 开头的每个单词,例如。

    正如另一个答案所暗示的,使用字符串的split 方法不会识别单词,而是可能包含标点符号的空格分隔块。这个基于re 的解决方案确实识别单词(字母和数字,不包括标点符号)。

    【讨论】:

    • 这似乎是一个很好的方法,因为我想避免在单词后面直接使用逗号。我的问题是,如果我想让这个词以 @ 符号开头,我就无法让它工作。想法?谢谢
    • 添加一个@?——可选的'@'出现在正则表达式模式的开头,在\b之前(你实际上可以省略\b,因为@那么v总是表示词边界,无需检查;-)。
    • 这非常适合我。你可以设计一种方法来检查结束字符吗?在我的情况下,字符串以数字结尾。
    【解决方案2】:

    我支持 Dive Into Python 建议。但基本上是:

    m = re.findall(r'\bf.*?\b', 'a fast and friendly dog')
    print(m)
    

    \b 表示单词边界,而 .*?确保我们存储整个单词,但后退以避免太过分(从技术上讲,? 被称为惰性运算符)。

    【讨论】:

      【解决方案3】:

      你可以这样做(虽然不使用re):

      matching_words = [x for x in sentence.split() if x.startswith(CHAR_TO_FIND)]
      

      正则表达式也可以工作(请参阅其他答案),但我认为这个解决方案会更具可读性,并且作为初学者学习 Python,您会发现列表推导式(如上面的解决方案)对于获得舒适度很重要与。

      【讨论】:

        【解决方案4】:
        >>> sentence="a quick brown fox for you"
        >>> pattern="fo"
        >>> for word in sentence.split():
        ...     if word.startswith(pattern):
        ...         print word
        ...
        fox
        for
        

        用空格分割句子,使用循环搜索模式并打印出来。

        【讨论】:

          【解决方案5】:
          import re
          
          s = "Your sentence that contains the word ROAD"
          s = re.sub(r'\bROAD', 'RD.', s)
          
          print s
          

          阅读:http://diveintopython3.org/regular-expressions.html

          【讨论】:

          • 为什么要替换和结束字符串锚?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-22
          • 2020-09-07
          • 1970-01-01
          • 2016-06-28
          • 1970-01-01
          • 2016-03-01
          相关资源
          最近更新 更多