python中的正则表达式:将2个正则表达式组合成一个正则表达式

2024-06-25 06:31:28 发布

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

假设我有以下列表:

a = ['35','years','opened','7,000','churches','rev.','mr.','brandt','said','adding','denomination','national','goal','one','church','every','10,000','persons']

我想删除所有元素,包括数字和以点结尾的元素。 所以我想删除'35','7,000','10,000','mr.','rev.'

我可以使用以下正则表达式单独执行此操作:

regex = re.compile('[a-zA-Z\.]')
regex2 = re.compile('[0-9]')

但当我尝试合并它们时,我要么删除所有元素,要么什么也不删除。 如何正确组合两个正则表达式


Tags: re元素列表revmrcompileaddingnational
3条回答

您可以使用:

(?:[^\d\n]*\d)|.*\.$

a demo on regex101.com

这应该起作用:

reg = re.compile('[a-zA-Z]+\.|[0-9,]+')

请注意,您的第一个正则表达式是错误的,因为它删除了其中一个点内的任何字符串。 为了避免这种情况,我在组合正则表达式中包含了[a-zA-Z]+\.。 您的第二个正则表达式也是错误的,因为它遗漏了一个“+”和一个“,”,这是我在上面的解决方案中包含的。 这里是demo

此外,如果假设以点结尾的元素可能包含一些数字,则完整的解决方案应为:

reg = re.compile('[a-zA-Z0-9]+\.|[0-9,]+')

如果您不需要捕获结果,那么这将匹配任何结尾带有点的字符串,或者任何结尾带有数字的字符串

\.$|\d

相关问题 更多 >