python - 正则表达式-在Python中第二次出现连字符后删除不需要的子字符串

标签 python regex python-3.x

下面是我需要从中提取有意义的 ID 的字符串

'12345-1-abcde-aBCD'
'123-Abcdefghi abcdefghijkl'
'1234567-1-AB-ABC A/1 ABC (AB1234)'
'12345-ABC-Abcdefghijkl'
'123456-Abcdefgh'
'12345-AB1CDE'

正则表达式应符合上述所有条件,并通过所有情况以给出以下输出

12345-1
123
1234567-1
12345
123456
12345

如果有字母,正则表达式应省略连字符中的部分。

最佳答案

你可以这样做:

import re

l = ['12345-1-abcde-aBCD',
     '123-Abcdefghi abcdefghijkl', 
     '1234567-1-AB-ABC A/1 ABC (AB1234)',  
     '12345-ABC-Abcdefghijkl',
     '123456-Abcdefgh',
     '12345-AB1CDE',]

In [10]: for s in l:
    ...:     print(re.match(r'^(\d+[-]?\d+?)',s))
    ...:                 
<re.Match object; span=(0, 7), match='12345-1'>
<re.Match object; span=(0, 3), match='123'>
<re.Match object; span=(0, 9), match='1234567-1'>
<re.Match object; span=(0, 5), match='12345'>
<re.Match object; span=(0, 6), match='123456'>
<re.Match object; span=(0, 5), match='12345'>

如果您可以有多个连字符和后续数字,您可以执行以下操作:

l = ['12345-1-abcde-aBCD',
     '123-Abcdefghi abcdefghijkl',
     '1234567-1-AB-ABC A/1 ABC (AB1234)',
     '12345-ABC-Abcdefghijkl',
     '123456-Abcdefgh',
     '12345-AB1CDE',
     '12345-1-1-ABC',
     '1-2-3-4-5-A-B-C-D-E-F-/-(AB12345)0',
     '12345-1A Abcd',]

In [31]: for s in l: 
    ...:     match = re.match(r'^([\d|-]*)(?![A-Za-z])',s)  
    ...:     print(match.group(0).rstrip('-')) 
    ...:                                                                                            
12345-1
123
1234567-1
12345
123456
12345
12345-1-1
1-2-3-4-5
12345

关于python - 正则表达式-在Python中第二次出现连字符后删除不需要的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61497023/

相关文章:

python - 如何将质心与几何图形一起保存在 shapefile 中?

regex - 非空间空间

javascript - Bootstrap datepicker changeDate 正则表达式错误

python-3.x - 未在Python Flask的装饰器中定义名称“字符串”

Python:打印文本元素不起作用

python-3.x - 模块未找到错误: No module named '__main__.xxxx' ; '__main__' is not a package

python - 使用 FiPY 在 Python 中求解复杂的偏微分方程

python - 什么是类似于 sum() 的减法函数,用于减去列表中的项目?

python - 使用 Python 2.7.9 的 TWOSQRS SPOJ 给出运行时错误 (NZEC)

javascript - 正则表达式用逗号分隔千位并保留两位小数