提取特定信息

时间:2016-05-24 15:19:12

标签: python regex python-3.x

我无法找到我的程序所需的信息,希望有人可以帮助我。 我有每行的数字和字母。在某些数字之前有特殊字符。 每一行都是这样的:

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])

此任务是否有正则表达式?

3 个答案:

答案 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+")