【发布时间】:2010-02-14 04:08:53
【问题描述】:
我有一句话。我想找到该句子中以特定字符开头的所有单词。我对编程和 Python 很陌生,但据我所知,这听起来像是一个正则表达式问题。
什么是模式匹配代码,可以让我找到与我的模式匹配的所有单词?
非常感谢,
布洛克
【问题讨论】:
我有一句话。我想找到该句子中以特定字符开头的所有单词。我对编程和 Python 很陌生,但据我所知,这听起来像是一个正则表达式问题。
什么是模式匹配代码,可以让我找到与我的模式匹配的所有单词?
非常感谢,
布洛克
【问题讨论】:
import re
print re.findall(r'\bv\w+', thesentence)
将打印句子中以'v' 开头的每个单词,例如。
正如另一个答案所暗示的,使用字符串的split 方法不会识别单词,而是可能包含标点符号的空格分隔块。这个基于re 的解决方案确实识别单词(字母和数字,不包括标点符号)。
【讨论】:
@?——可选的'@'出现在正则表达式模式的开头,在\b之前(你实际上可以省略\b,因为@那么v 将总是表示词边界,无需检查;-)。
我支持 Dive Into Python 建议。但基本上是:
m = re.findall(r'\bf.*?\b', 'a fast and friendly dog')
print(m)
\b 表示单词边界,而 .*?确保我们存储整个单词,但后退以避免太过分(从技术上讲,? 被称为惰性运算符)。
【讨论】:
你可以这样做(虽然不使用re):
matching_words = [x for x in sentence.split() if x.startswith(CHAR_TO_FIND)]
正则表达式也可以工作(请参阅其他答案),但我认为这个解决方案会更具可读性,并且作为初学者学习 Python,您会发现列表推导式(如上面的解决方案)对于获得舒适度很重要与。
【讨论】:
>>> sentence="a quick brown fox for you"
>>> pattern="fo"
>>> for word in sentence.split():
... if word.startswith(pattern):
... print word
...
fox
for
用空格分割句子,使用循环搜索模式并打印出来。
【讨论】:
import re
s = "Your sentence that contains the word ROAD"
s = re.sub(r'\bROAD', 'RD.', s)
print s
【讨论】: