提取特定信息

2024-10-05 10:36:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我找不到我的程序需要的信息,希望有人能帮我。 我每行都有数字和字母。某些数字前有特殊字符。 每条线如下所示:

12456 t0 45 54 # 36478 t04 # 37489 to4 # 83940 to5 + 63748 nn 00 +374840 bb 009 + 144839 op 45

我必须提取前面有#和+的数字。你知道吗

结果应该是3元组,如下所示:

(第一个数字,前面有#的所有数字作为一个列表(直到空格),前面有+的所有数字作为一个列表(也直到空格,没有to4,to5等等):

(12456, [36478, 37489, 83940], [63748, 375840, 144839])

这个任务有正则表达式吗?你知道吗


Tags: 程序信息列表字母数字nn元组空格
3条回答

下面是正则表达式,以获取您的行是变量字符串的值

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

由于分组的要求,我不认为正则表达式是合适的工具。我建议如下:

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

我的建议是使用三个简单正则表达式并合并结果,因为要提取未定义数量的数字,您必须在同一行中创建一个具有多个匹配项的全局正则表达式,因此:

对于第一个数字:

re.compile("\d+")

对于#数字

re.compile("# *?\d+")

对于+数字

re.compile("+ *?\d+")

相关问题 更多 >

    热门问题