使用Python的正则表达式.match()方法获取下划线之前和之后的字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Python的正则表达式.match()方法获取下划线之前和之后的字符串相关的知识,希望对你有一定的参考价值。
我有以下代码:
tablesInDataset = ["henry_jones_12345678", "henry_jones", "henry_jones_123"]
for table in tablesInDataset:
tableregex = re.compile("d{8}")
tablespec = re.match(tableregex, table)
everythingbeforedigits = tablespec.group(0)
digits = tablespec.group(1)
我的正则表达式只应返回字符串,如果它在下划线后包含8位数。一旦它返回字符串,我想使用.match()
使用.group()
方法获得两个组。第一组应包含一个字符串,将包含数字前的所有字符,第二组应包含一个包含8位数字符的字符串。
使用.match()
和.group()
获取我正在寻找的结果的正确正则表达式是什么?
答案
tableregex = re.compile("(.*)_(d{8})")
另一答案
使用捕获组:
>>> import re
>>> pat = re.compile(r'(?P<name>.*)_(?P<number>d{8})')
>>> pat.findall(s)
[('henry_jones', '12345678')]
如果需要,您可以获得命名组的优点:
>>> match = pat.match(s)
>>> match.groupdict()
{'name': 'henry_jones', 'number': '12345678'}
另一答案
我认为这种模式应该符合你的需要:(.*?_)(d{8})
。
第一组包括最多8位数的所有内容,包括下划线。第二组是8位数。
如果您不想包含下划线,请改用:(.*?)_(d{8})
另一答案
干得好:
import re
tablesInDataset = ["henry_jones_12345678", "henry_jones", "henry_jones_123"]
rx = re.compile(r'^(D+)_(d{8})$')
matches = [(match.groups())
for item in tablesInDataset
for match in [rx.search(item)]
if match]
print(matches)
比任何点星汤更好:)
以上是关于使用Python的正则表达式.match()方法获取下划线之前和之后的字符串的主要内容,如果未能解决你的问题,请参考以下文章
python 正则表达式re使用模块(match()search()和compile())
40 python 正则表达式 match方法匹配字符串 使用search函数在一个字符串中查找子字
使用Python的正则表达式.match()方法获取下划线之前和之后的字符串
Python爬虫编程思想(29):正则表达式的匹配(match)与搜索(search)
Python: 字符串搜索和匹配,re.compile() 编译正则表达式字符串,然后使用match() , findall() 或者finditer() 等方法