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

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}-除 break line 字符外的一到十字符
  • $-字符串结束
  • (?<![,.])-字符串末尾不允许有,..

Python相关问答推荐

根据另一列中的nan重置值后重新加权Pandas列

如何从具有不同len的列表字典中创建摘要表?

Vectorize多个头寸的止盈/止盈回溯测试pythonpandas

如何记录脚本输出

如何从.cgi网站刮一张表到rame?

django禁止直接分配到多对多集合的前端.使用user.set()

Python解析整数格式说明符的规则?

对象的`__call__`方法的setattr在Python中不起作用'

Django REST Framework:无法正确地将值注释到多对多模型,不断得到错误字段名称字段对模型无效'<><>

如何在UserSerializer中添加显式字段?

基于多个数组的多个条件将值添加到numpy数组

Numpyro AR(1)均值切换模型抽样不一致性

判断Python操作:如何从字面上得到所有decorator ?

如何获得3D点的平移和旋转,给定的点已经旋转?

文本溢出了Kivy的视区

如何在Python中创建仅包含完整天数的月份的列表

查找数据帧的给定列中是否存在特定值

迭代工具组合不会输出大于3的序列

PYODBC错误(SQL包含-26272个参数标记,但提供了235872个参数,HY 000)

基于2级列表的Pandas 切片3级多索引