python - Regex 提取不规则 delimiters

我有一列数据,其中包含长度在 4 到 10 位之间的 ID 号。但是,这些身份证号码是手动输入的,没有系统的delimiters。在某些情况下,id 编号由注释分隔。需要注意的是真实数据是不可预测的,这里是 python 列表中的 values 示例。

[ '13796352',  
'2113146, 2113148, 2113147',  
'asdf ee A070_321 on 4.3.99 - MC',  
'blah blah3', 
'1914844\xa0, 3310339, 1943270, 2190351, 1215262',  
'789702/ 89057',  
'1 of 5 blah blah', 
'688327/ 6712563/> 5425153',  
'1820196/1964143/ 249805/ 300510',
'731862\n\nAccepted: 176666\nRejected: 8787' ]

这是不工作的 regex :

r'^[0-9]{4,10}([\s\S]*)[[0-9]{4,10}]*'

所需的输出(遍历列表)是:

[''],
[', ',', '],
[''], 
[''],
['\xa0, ',', ',', ',', '], 
['/ '],  
[''], 
['/ ,'/> '],  
[''/','/ ','/ '],
['\n\nAccepted: ','\nRejected: ']

我没有通过上面的 regex 得到这个。我究竟做错了什么?

回答1

这只是一个快速草图,但它看起来非常接近您想要的。基本上尝试匹配4个或更多数字,在匹配处拆分并排除

  • 空字符串
  • 没有任何匹配项的条目。
>>> data = [...] # your sample
>>> num_re = re.compile(r'\d{4,}')
>>> [[x for x in num_re.split(d) if x] if num_re.search(d) else [] for d in data]
[[],
 [', ', ', '],
 [],
 [],
 ['\xa0, ', ', ', ', ', ', '],
 ['/ '],
 [],
 ['/ ', '/> '],
 ['/', '/ ', '/ '],
 ['\n\nAccepted: ', '\nRejected: ']]

回答2

如果要提取 id,可以使用例如:

import re

data = [
  '13796352',  
  '2113146, 2113148, 2113147',  
  'asdf ee A070_321 on 4.3.99 - MC',  
  'blah blah3', 
  '1914844\xa0, 3310339, 1943270, 2190351, 1215262',  
  '789702/ 89057',  
  '1 of 5 blah blah', 
  '688327/ 6712563/> 5425153',  
  '1820196/1964143/ 249805/ 300510',
  '731862\n\nAccepted: 176666\nRejected: 8787'
]

for el in data:
  print(re.findall(r'(?<!\d)\d{4,10}(?!\d)', el))

导致:

['13796352']
['2113146', '2113148', '2113147']
[]
[]
['1914844', '3310339', '1943270', '2190351', '1215262']
['789702', '89057']
[]
['688327', '6712563', '5425153']
['1820196', '1964143', '249805', '300510']
['731862', '176666', '8787']

(?<!\d)\d{4,10}(?!\d) 表示匹配一个 4 到 10 个数字的序列,该序列前面或后面都没有数字。

相似文章

c - 没有从c中的字符串数组函数获取输出

我在C中创建了一个拆分函数,以便在某些程序中使用它的returnvalue。但是当我使用printf检查它的value时,我发现有一些错误,但我无法自己修复它们。我修复了我能修复的大部分错误。我写的代...

最新文章