即时试图建立一个满足11.11.11但不111.11.111 我使用python的正则表达式的帮助(蟒蛇+
keyword = re.compile(r"[0-9]*[0-9]\.[0-9]*[0-9]\.[0-9]*[0-9]")
的日期可能会在开始/结束的表达一个句子,并没有一个空格,但下一行之前/之后,我将如何解释这两个?因为它会回升11.11.11,但也111.11.11111等:(
即时试图建立一个满足11.11.11但不111.11.111 我使用python的正则表达式的帮助(蟒蛇+
keyword = re.compile(r"[0-9]*[0-9]\.[0-9]*[0-9]\.[0-9]*[0-9]")
的日期可能会在开始/结束的表达一个句子,并没有一个空格,但下一行之前/之后,我将如何解释这两个?因为它会回升11.11.11,但也111.11.11111等:(
你可以使用\b
来匹配单词边界。例如,您可以使用正则表达式:
re.compile(r'\b\d{2}\.\d{2}\.\d{2}\b')
我也用\d
匹配任何数字和{2}
后缀匹配任何先前传来的两个实例。如果您想在任何这些情况下匹配1或2位数字,则可以将{2}
更改为{1,2}
。
*
表示“零或多个前面的标记”。因此,你的正则表达式将匹配来自1.1.1
什么999999.999999.99999
等
您可以更具体是这样的:
keyword = re.compile(r"\b[0-9]{2}\.[0-9]{2}\.[0-9]{2}\b")
的\b
字边界锚确保该数字在那个位置开始/结束。否则,您可以选取子字符串匹配(例如,匹配字符串1234.56.7890
中的34.56.78
)。
当然,您需要验证它是否是单独的合理日期。不要使用正则表达式(它是possible but cumbersome),而是使用datetime
模块的strptime()
classmethod。
尝试使用?
而不是*
作为通配符。
?
匹配前一个元素的0或1个实例。换句话说,它使元素可选;它可以存在,但它不一定是。
这将同时匹配1.1.1
和11.11.11
,但不1111.1111.1111
:
keyword = re.compile(r"\b[0-9]?[0-9]\.[0-9]?[0-9]\.[0-9]?[0-9]\b")
抱歉,但认为不匹配111.1.111,因为它没有明确地说,在末端不多。 – RY4N 2011-03-23 08:20:13
你说得对。答案已更正。 – gparis 2011-03-23 08:30:45
@Ryan它不会_match_'111.1.111',因为're.match'只匹配整个字符串。然而,'re.search'仍然会返回一个匹配,我想这就是你的意思。 – 2011-03-23 10:14:42