Python 提取大写前的元素

Python 提取大写前的元素,python,regex,string,uppercase,Python,Regex,String,Uppercase,我有以下字符串: text = '6 rue du Bras de Fer MONTPELLIER France' 我只想提取“法尔布拉斯街6号” 我正在尝试使用正则表达式来提取此部分,这是我的正则表达式代码: re.findall(r'(.*)[A-Z]+',text) 但它让我回想起: ['6 rue du Bras de Fer MONTPELLIER '] Lookaheads是为以下目的而设计的: re.findall(r'^(.*)(?=\s+[A-Z]{2})',text)

我有以下字符串:

text = '6 rue du Bras de Fer MONTPELLIER France'
我只想提取“法尔布拉斯街6号” 我正在尝试使用正则表达式来提取此部分,这是我的正则表达式代码:

re.findall(r'(.*)[A-Z]+',text)
但它让我回想起:

['6 rue du Bras de Fer MONTPELLIER ']

Lookaheads是为以下目的而设计的:

re.findall(r'^(.*)(?=\s+[A-Z]{2})',text)

这至少在空格后的两个大写字母之前匹配。

您可以提取所有仅由两个或更多大写字母组成的第一个单词:

m = re.search(r'^(.*?)\s*\b[A-Z]{2,}\b', text)
if m:
    print(m.group(1)) # => 6 rue du Bras de Fer
请参阅和

图案细节

  • ^
    -字符串的开头
  • (.*)
    -捕获组1:除换行符以外的任何0个或更多字符
  • \s*
    -0+空格
  • \b
    -单词边界
  • [A-Z]{2,}
    -两个或多个大写字母
  • \b
    -单词边界
    • 请尝试以下代码:

      import re
      text = '6 rue du Bras de Fer MONTPELLIER France'
      re.findall(r'(.*)[a-z]+ ',text)
      

      您必须在
      [A-Z]
      中将
      A
      更改为
      A
      ,将
      Z
      更改为
      Z
      。另外,在正则表达式的末尾需要一个
      空格。

      认为真正的解决方案是在大写字母之前提取,在
      前后都没有大写字母的最后一个大写字母

      (?:[^A-Z]|)(?)

      扩大

       (?:
            [^A-Z] 
         |  
            (?<! [A-Z] )
            [A-Z] 
            (?! [A-Z] )
       )+
       (?= [A-Z] )
      
      (?)
      [^A-Z]
      |  
      
      (?
      re.split(r'\s*\b[A-Z]{2,}\b',text)[0]
      需要进行后处理:结果
      ['6 rue du Bras de Fer','']
      @Jean-Françoisfare谢谢。修复