用于转换的正则表达式(不使用多个语句)

2024-10-16 17:21:00 发布

您现在位置:Python中文网/ 问答频道 /正文

使用正则表达式将一条语句提取并转换为另一条语句的最佳方法是什么

具体地说,我实现了以下功能,从一个文本块中查找并提取一个sudent数字,并将其转换为:AB123CDAB-123-CD

现在,它被实现为3个语句,如下所示:

gg['student_num'] = gg['student_test'].str.extract('(\d{2})\w{3}\d{2}') + \
                    '-' + gg['student_num'].str.extract('\d{2}(\w{3})\d{2}') + \
                    '-' + gg['student_test'].str.extract('\d{2}\w{3}(\d{2})')

我觉得我需要三个陈述是不对的- 每组一个-在下面串联在一起(如果这更复杂,甚至更多),并想知道是否有更好的方法来查找和转换一些文本


Tags: 方法test文本功能abcdextract数字
3条回答

试试这个。希望有帮助

>>> import re
>>> s = r'ABC123DEF'
>>> n = re.search(r'\d+',s).group()
>>> f  = re.findall(r'[A-Za-z]+',s)
>>> new_s = f[0]+"-"+n+"-"+f[1]
>>> new_s

输出:

'ABC-123-DEF'

这不是正则表达式,但它快速而简洁:

s = "AB123CD"

first = [i for i, a in enumerate(s) if a.isdigit()][0]
second = [i for i, a in enumerate(s) if a.isdigit()][-1]

new_form = s[:first]+"-"+s[first:second+1]+"-"+s[second+1:]

输出:

AB-123-CD

替代正则表达式解决方案:

letters = re.findall("[a-zA-Z]+", s)
numbers = re.findall("[0-9]+", s)
letters.insert(1, numbers[0])
final = '-'.join(letters)
print(final)

输出:

AB-123-CD

您可以使用regexp获取段列表,然后按以下方式连接它们:

'-'.join(re.search(r'(\d{2})(\w{3})(\d{2})', string).groups())

如果string不包含所需的模式(re.search()返回None),则可以得到AttributeError,因此您可能希望将此表达式包装在try...except块中

相关问题 更多 >