Python正则表达式捕获多大写词和相邻词

Python正则表达式捕获多大写词和相邻词,python,regex,string,capitalization,Python,Regex,String,Capitalization,我有一个执行以下操作的正则表达式: 查找具有两个或多个相邻大写字母a-Z的单词(“多大写单词”) 如果可能,将匹配项向左和向右扩展到另一个多大写单词,只要每个多大写单词之间的非多大写单词不超过三个;及 将匹配扩展到左侧和右侧,以分别包含5个和3个非多大写单词的序列 我的正则表达式捕获所需的模式,但当存在相邻的多大写单词时,会返回多种重叠匹配,如下面的AA-BB-DD。请帮助我调整我的正则表达式,使其按需要工作 这是我的代码草案: str1 = 'z z z z z11 AA BB DD f

我有一个执行以下操作的正则表达式:

  • 查找具有两个或多个相邻大写字母a-Z的单词(“多大写单词”)
  • 如果可能,将匹配项向左和向右扩展到另一个多大写单词,只要每个多大写单词之间的非多大写单词不超过三个;及
  • 将匹配扩展到左侧和右侧,以分别包含5个和3个非多大写单词的序列
  • 我的正则表达式捕获所需的模式,但当存在相邻的多大写单词时,会返回多种重叠匹配,如下面的AA-BB-DD。请帮助我调整我的正则表达式,使其按需要工作

    这是我的代码草案:

    str1 =   'z z z z z11 AA BB DD f f d e gd df sdf ggf we AA ff d f f'
    re.findall(r'(?=(\s(?:[^\s]+[\s]+){5}(?:[^A-Z\s]*[A-Z][A-Z]+(?:[^\s]+[\s]+){1,3}?)*?[^A-Z\s]*[A-Z][A-Z]+.*?(?:[\s]+[^\s]+){3}\s))', str1)
    
    实际产量:

    Match 1 - 'z z z z z11 AA BB DD f'
    Match 2 - 'z z z z11 AA BB DD f f'
    Match 3 - 'z z z11 AA BB DD f f d'
    Match 4 - 'gd df sdf ggf we AA ff d f'
    
    期望输出:

    Match 1 - 'z z z z z11 AA BB DD f f d'
    Match 2 - 'gd df sdf ggf we AA ff d f'
    
    试试这个:

    >>> pattern = r'(?:[a-z\d]+\s*){0,5}(?:[A-Z]+)(?:\s*[A-Z]+)*(?:\s*[a-z]+){0,3}'
    >>> re.findall(pattern, str1)
    ['z z z z z11 AA BB DD f f d', 'gd df sdf ggf we AA ff d f']
    

    我很感激你的努力,但是我的regex没有达到我想要的几个目标。我的第一点需要多个大写字母,而不是单大写字母。另外,我在其他一些数据上尝试了这个答案,结果失败了。我真正想要的是对我现有的正则表达式进行调整。我现有的正则表达式已经有了大量的思想。@user2104778,我的答案的第二部分无效,我删除了它。你试过第一个了吗?是的,我也试过了,它在单词或标点符号中有数字的地方坏了。我可能会看看我是否可以在以后调整你的答案,但就目前的情况来看,它不起作用。别误会,我很感激你的尝试。@user2104778,这个怎么样?(这基本上是您的简化,没有前瞻性断言)足够接近。我意识到问题是什么。我的非多大写单词的正则表达式模式捕获了多大写单词。我修改了定义,它成功了。