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;。 我怎么能用一个正则表达式做到这一点?
答案 0 :(得分:5)
这是一个简单的正则表达式:
^([\d.]+)\s*([^\t?]+\??)
第1组是数字,第2组包含文本。
要检索一个匹配项:
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修复了群组。