You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Python中使用正则表达式提取字符及DataFrame中的位置与财年?

嘿,这两个正则相关的问题我来帮你搞定!

问题1:Python里用正则提取大写字母及字母数字字符

提取这类字符核心是用Python的re模块,搭配精准的正则模式就行,分几种场景给你示例:

场景1:提取所有单个大写字母,以及任意字母(大小写)+数字组成的连续序列

比如从混合字符串里把大写字母、字母数字片段都揪出来:

import re

text = "Hello WORLD_123 TestABC456 xyz789"
matches = re.findall(r'[A-Z]|[A-Za-z0-9]+', text)
print(matches)  # 输出: ['H', 'ello', 'WORLD', '123', 'TestABC456', 'xyz789']
  • [A-Z]:匹配单个大写字母
  • [A-Za-z0-9]+:匹配一个或多个字母(大小写)/数字的连续片段

场景2:只提取大写字母,以及大写字母+数字的组合

如果你只想要纯大写字母或者大写字母加数字的内容:

matches = re.findall(r'[A-Z]+[0-9]*|[0-9]+[A-Z]*', text)
print(matches)  # 输出: ['H', 'WORLD', '123', 'ABC456']

场景3:严格提取同时包含字母和数字的序列(必须两者都有)

用正向预查来确保片段里既有字母又有数字:

matches = re.findall(r'(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]+', text)
print(matches)  # 输出: ['123', 'TestABC456', 'xyz789']

问题2:从DataFrame的文件名列提取位置和财年

完全可以用正则搞定!先看你的示例数据,财年有两种格式:FY+2/4位数字(比如FY19、FY2020)和FiscalYear+4位数字(FiscalYear2020);位置则是财年前面的那个单词,刚好可以利用这个规律来写正则。

先构造示例DataFrame:

import pandas as pd
import re

df = pd.DataFrame({
    'Filename': [
        'KATH FY19 nepal',
        'Nepal BIRATNA FY2020',
        'India DEL FY18',
        'HQ chennai FiscalYear2020'
    ]
})

然后用str.extract()一次性提取两个列,正则模式直接匹配财年前面的单词财年本身

# 正则里的两个分组分别对应Location和FiscalYear
pattern = r'.*?(\w+)\s+(FY\d{2,4}|FiscalYear\d{4})'
df[['Location', 'FiscalYear']] = df['Filename'].str.extract(pattern)

运行后你就能得到预期的结果:

FilenameLocationFiscalYear
KATH FY19 nepalKATHFY19
Nepal BIRATNA FY2020BIRATNAFY2020
India DEL FY18DELFY18
HQ chennai FiscalYear2020chennaiFiscalYear2020

正则模式解释:

  • .*?:非贪婪匹配任意字符,避免过度匹配到无关内容
  • (\w+):捕获位置,匹配财年前面的完整单词
  • \s+:匹配单词和财年之间的空格
  • (FY\d{2,4}|FiscalYear\d{4}):捕获财年,覆盖两种财年格式(FY后跟2-4位数字,或者FiscalYear后跟4位数字)

如果你的数据还有其他特殊情况,比如位置不是财年前一个单词,可以再调整正则,但目前这个模式完全适配你的示例~


内容的提问来源于stack exchange,提问作者gannu

火山引擎 最新活动