如何python正则表达式匹配以下?

时间:2014-05-08 00:45:57

标签: python regex

1<assume tab here>Algebra I<assume tab here>START
1.1 What are the Basic Numbers? 1-1

对于上面两行中的每一行,我如何正则表达式只匹配&#34;?&#34;的数字。从本质上讲,我想要以下几组:

["1", "Algebra I"]
["1.1", "What are the Basic Numbers?"]

匹配所有内容,包括问号,或最多为&#34;标签字符&#34;。 我怎么能用一个正则表达式做到这一点?

2 个答案:

答案 0 :(得分:5)

这是一个简单的正则表达式:

^([\d.]+)\s*([^\t?]+\??)

第1组是数字,第2组包含文本。

Regular expression visualization

要检索一个匹配项:

match = re.search(r"^([\d.]+)\s*([^\t?]+\??)", s)
if match:
    mynumbers = match.group(1)
    myline = match.group(2)

要迭代匹配,请从以下位置获取第1组和第2组:

reobj = re.compile(r"^([\d.]+)\s*([^\t?]+\??)", re.MULTILINE)
for match in reobj.finditer(s):
    # matched text: match.group()

答案 1 :(得分:0)

你走了:

(\d(?:\.\d)*)\s+(?:(.*?\?|.*?)\t)

有关说明:(\d(?:\.\d)*)匹配一个后跟零个或多个.\d的数字。接下来是一个或多个空白字符,后跟任何({懒惰而不是贪婪)(.*?),后面跟着?或\ t在非捕获组中。

输出:

 string1 = "1.1 What are the Basic Numbers? 1-1"
 string2 = '1\tAlgebra I\tSTART'
 m = re.match(pattern, string2)
 m.group(1)
#'1'
 m.group(2)
#'Algebra I'
 m = re.match(pattern, string1)
 m.group(1)
#'1.1'
 m.group(2)
#'What are the Basic Numbers?'

编辑:添加了非捕获组。

编辑#2:将其修复为包含问号

编辑#3修复了群组。