在我的代码中,我使用了四个正则表达式条件,但它太长了,所以有简单或通用的方法可以组合这些条件吗?

s_l = ['abcabcabcabc', 'defdef.', 'sssssss', 'def', 'def,', 'xyzabc,', 'efgdefefg']

for idx, str_item in enumerate(s_l):
    if (re.match(r'(abc|def)+', str_item)  # find abc or def in str
    and re.match(r'^((?!(xyz|efg)).)*$', str_item)  # find xyz and efg not in str 
    and re.match(r'^.*[^,|.]$', str_item)   # comma not in the end of str
    and re.match(r'^[a-zA-Z]{1,10}$', str_item)):  # find length of str smaller than 10
        print(idx, "True")
    else:
        print(idx, "False")

推荐答案

你可以用

import re
 
s_l = ['abcabcabcabc','defdef.','sssssss','def','def,','xyzabc,','efgdefefg']
 
for idx, str_item in enumerate(s_l):
    if re.match(r'^(?=abc|def)(?!.*(?:xyz|efg)).{1,10}$(?<![,.])', str_item): #find length of str smaller than 10
        print(idx, "True")
    else:
        print(idx, "False")

Python demoregex demo.

Details:

  • ^-字符串的开始
  • (?=abc|def)-开始时不允许使用abcdef
  • (?!.*(?:xyz|efg))-除了尽可能多的换行符之外,任何零个或更多字符之后都不允许使用xyzefg
  • .{1,10}-除断线字符外的一到十字符
  • $-字符串结束
  • (?<![,.])-字符串末尾不允许有,..

Python相关问答推荐

如何在 Python 中运行 PowerShell cmdlet 以获取已连接 USB 设备的列表?

Python类型注释:注释返回库对象的函数的正确方法

Pandas 每周计算重复值

如何在 JSONField 的“更新”中使用 Django F() 表达式

如何使用Pandas 函数提取()从地址中提取邮政编码?

替换 dask map_partitions 中的现有列会发出警告

3.11 Lab:最小数

如何在“\n”上拆分一行并将拆分后的所有内容添加到新行?

从文本文件创建字典列表

将多列拆分为多列,Pandas

将列表拆分成块,块之间有重复

如何重构此代码片段以提高效率?

如何选择python selenium中的所有复选框?

如何根据 Pandas 中的索引级别设置行值?

使用 python 将 messagePack 解析为 Json

如何在 map 中插入点

使用其他爬取信息的scrapy图像管道文件名

如何加快 aiohttp 解析器 bs4?

将字典列表与特定值匹配组合

按日期字段执行合并,而不在 DataFrame 中创建辅助列