Python正则表达式换行符

时间:2013-07-08 17:54:07

标签: python regex line

我正在尝试搜索一个字符串,我知道它总是一个句子,找到前面的三个单词和逗号后面的三个单词。正则表达式是正确的方法吗?你如何解释这样一个事实,即有时候你会在一个句子的开头和结尾,并且不会有3个单词?

感谢您的帮助,尝试学习正则表达式。

2 个答案:

答案 0 :(得分:0)

为您的例子,

sen= "The brown fox jumped over the red barn,and found the chickens"
result_left=sen.split(',')[0].split()[-3:]

#result_left ['the', 'red', 'barn']

#for the right words
result_right=sen.split(',')[1].split()[:3]

答案 1 :(得分:0)

嗯,那个有点长,但我猜它有效:

>>> import re
>>> string = "The brown fox jumped over the red barn, and found the chickens."
>>> res = re.findall(r'(\b[a-z]+\b)?[^a-z]*(\b[a-z]+\b)?[^a-z]*(\b[a-z]+\b)?[^a-z]*,\s*(\b[a-z]+\b)?[^a-z]*(\b[a-z]+\b)?[^a-z]*(\b[a-z]+\b)?', string, re.IGNORECASE)
>>> res
[('the', 'red', 'barn', 'and', 'found', 'the')]

对于字符串,例如:

,这也会忽略数字
string = "The brown fox jumped over the red barn, and found 10 chickens."

给予:

[('the', 'red', 'barn', 'and', 'found', 'chickens')]

对于像:

这样的事情
string = "The brown fox jumped over the red barn, and fled."

它给出了:

[('the', 'red', 'barn', 'and', 'fled')]

逗号之前的单词也一样。

\b指的是单词边界,只会在单词的末尾(字母或数字)匹配。

[a-z]+指的是一个字符类,即az的所有字母。最后的+表示此字符类重复多次,从而实现完整单词的匹配。

(\b[a-z]+\b)是一个捕获组(注意括号)并将存储在结果中。在末尾添加问号将指示可能的发生(即如果存在则匹配,如果不存在则不匹配,因此如果逗号前少于3个单词,您将如何获得结果)

[^a-z]*是一个否定的类,请注意开头方括号之后的插入符号。它将匹配任何字符,而不是字母az。星号*表示出现0次或更多次。

,是一个字面逗号。

\s是空格,制表符,换行符。它后面的星号仍然表示出现0次或更多次。

re.IGNORECASE,正如它所暗示的那样,会使匹配不区分大小写。