用于句子的Python正则表达式不希望匹配

时间:2013-01-25 00:40:17

标签: python regex

任何人都可以解释为什么这个(在Python中):

pattern = re.compile(r"""
^
([[a-zA-Zàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ]+\s{1}]+)
([a-zA-Zàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ]+)   # Last word.
\.{1}                                                                                 
$
""", re.VERBOSE + re.UNICODE)

if re.match(pattern, line):

与“一句话”不符。

我实际上希望将整个句子(包括句点)作为返回的组()返回,但一直失败。

3 个答案:

答案 0 :(得分:0)

我想也许你打算这样做:

(([a-zA-Zàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ]+\s{1})+)
 ^                                             ^

我不认为嵌套的方括号你做了你认为他们做的事。

答案 1 :(得分:0)

这个正则表达式有效:

pattern = re.compile(r"""
^
([a-zA-Zàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ]+\s{1})+
([a-zA-Zàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ]+)   # Last word.
\.{1}
$
""", re.VERBOSE + re.UNICODE)

line = "A sentence."

match = re.match(pattern, line)

>>> print "'%s'" % match.group(0)
'A sentence.'
>>> print "'%s'" % match.group(1)
'A '
>>> print "'%s'" % match.group(2)
'sentence'

要返回整个匹配项(在这种情况下为line),请使用match.group(0)

由于第一个匹配组可以多次匹配(每个字除了最后一个匹配一次),因此您只能使用match.group(1)访问倒数第二个字。

顺便说一下,在这种情况下不需要{1}表示法,匹配一次且只有一次是默认行为,因此可以删除此位。

额外的一组方括号肯定没有帮助你:)。

答案 2 :(得分:0)

事实证明以下内容确实有效并包含了我想要的所有扩展的ascii字符

^
([\w+\s{1}]+\w{1}\.{1})
$