我无法找到我的程序所需的信息,希望有人可以帮助我。 我有每行的数字和字母。在某些数字之前有特殊字符。 每一行都是这样的:
12456 t0 45 54 # 36478 t04 # 37489 to4 # 83940 to5 + 63748 nn 00 +374840 bb 009 + 144839 op 45
我必须先用#和+提取数字。
结果应该看起来像一个3-tupel,像这样:
(第一个数字,所有带#前面的数字作为一个列表(直到空格),所有数字都带有+前面的列表(直到太空,没有to4,to5等)):
(12456, [36478, 37489, 83940], [63748, 375840, 144839])
此任务是否有正则表达式?
答案 0 :(得分:0)
以下是获取值为行变量字符串
的正则表达式r1= re.compile("(\d+)")
r2 = re.compile("#\s*(\d+)")
r3 = re.compile("\+\s*(d+)")
(r3.search(string).group(0),r2.findall(string),r.findall(string))
答案 1 :(得分:0)
由于分组要求,我认为正则表达式不适合作业。我建议如下:
in_str = "12456 t0 45 54 # 36478 t04 # 37489 to4 # 83940 to5 + 63748 nn 00 +374840 bb 009 + 144839 op 45"
parts = in_str.split()
first = None
got_hash = False
hashes = []
got_plus = False
pluses = []
for part in parts:
if first is None:
first = int(part)
elif part == "#":
got_hash = True
elif part == "+":
got_plus = True
elif got_hash:
hashes.append(int(part))
got_hash = False
elif got_plus:
pluses.append(int(part))
got_plus = False
print ((first, hashes, pluses))
请注意,这不会打印375840
,因为缺少空间
答案 2 :(得分:0)
我的建议是使用三个简单的正则表达式并合并结果,因为要提取一个未定义的数字,你必须在同一行上创建一个具有多个匹配的全局正则表达式,所以:
第一个号码:
re.compile("\d+")
对于#
号码
re.compile("# *?\d+")
和+
数字
re.compile("+ *?\d+")