如果字符串中只有一个,为什么我的正则表达式返回2个结果?

时间:2018-12-15 17:08:21

标签: python regex

我正在尝试使用python3从字符串中提取ID。 regex返回多于一项,尽管文本中只有一项:

  

text_total ='Lor Ippsum参考。 116519LN Perlmutt'

>>> re.findall(r"Ref\.? ?(([A-Z\d\.]+)|([\d.]+))", text_total)

[('116519LN', '116519LN', '')]

我正在寻找一个经过修剪的结果,如果可能的话,无论如何都不会出现列表。

这就是为什么我的原始行是

 [x for x in re.findall(r"Ref\.? ?(([A-Z\d\.]+)|([\d.]+))", text_total)][0]

正则表达式有一个OR,因为我也在尝试匹配

  

Ippsum编号参考。 1166AB.39AZU2.123传说中的Ippsum

如何从文本中仅检索一个结果并同时满足两个条件?

2 个答案:

答案 0 :(得分:0)

您不一定需要or,也可以Ref\.? ?([a-zA-Z. 0-9]+)(请注意正则表达式末尾的空格,它将用作比赛的结尾。

import re
pattern = r"Ref\.? ?([a-zA-Z. 0-9]+) "
text_total = "Lore Ippsum Ref. 116519LN Perlmutt"
results = re.findall(pattern, text_total)
print(results[0])

答案 1 :(得分:0)

可以说,您的OR群组内的群组是“捕获群组”。您需要使用这些组内的<?php $array = array_map("str_getcsv",preg_split('/\r*\n+|\r+/',file_get_contents("test.csv"))); ?> 语法使它们无法捕获,并允许外部组保留为捕获组。

?:

请注意,如果有很多匹配项,您仍然可以得到多个匹配项。您可以将re.search用于第一个匹配项。