首页 > 解决方案 > 具有破折号的数字模式的 Python 正则表达式

问题描述

我在 pandas 数据框中有一列名为 sample_id。每个条目都包含一个字符串,我想从这个字符串中提取一个具有两种形式之一的数字模式

1-234-5-6789

或者

123-4-5648

我无法为此定义正确的正则表达式模式。到目前为止,我一直在尝试以下方法:

re.findall(pattern=r'\b2\w+', string=str(data['sample_id']))

但这只是拉取以 2 开头的值,并且只是数字模式的第一块。如何用破折号表达上述模式?

标签: pythonregexstring

解决方案


垂直管道|在正则表达式中生成 OR,因此您可以使用:

test1='123-4-5648'
test2='1-234-5-6789'

re.findall(pattern=r'[0-9]-[0-9]{3}-[0-9]-[0-9]{4}|[0-9]{3}-[0-9]-[0-9]{4}', string=test1)
re.findall(pattern=r'[0-9]-[0-9]{3}-[0-9]-[0-9]{4}|[0-9]{3}-[0-9]-[0-9]{4}', string=test2)

[0-9]0匹配到9(包括)范围内的单个数字,{4}表示四个这样的数字应该连续出现,-表示连字符,|表示 OR 并分隔您提到的两个模式。


推荐阅读