gpt4 book ai didi

regex - 根据单词是否大写拆分 Pandas 数据框列

转载 作者:行者123 更新时间:2023-12-05 01:55:12 27 4
gpt4 key购买 nike

我有以下格式的数据框列:

<表类="s-表"><头>标题<正文>这是一个例子还有这个最后一个J.再来一个

我想把它分成两列:

<表类="s-表"><头>header1标题2<正文>这是一个例子还有这个最后一个空空J.再来一个

我试过像这样提取信息:

df1['header'].str.split('[A-Z]', expand=True)

但我的正则表达式达不到标准。非常感谢任何帮助!

最佳答案

希腊字母声明

要仅匹配希腊大写字母,请将以下模式中的 [A-Z] 替换为 [\u0391-\u03A1\u03A3-\u03A9]。要同时匹配 ASCII 和希腊大写字母,请使用 [a-zA-Z\u0391-\u03A1\u03A3-\u03A9]

rx = r'^\s*(?P<header1>(?:[\u0391-\u03A1\u03A3-\u03A9]+\b(?!\.)(?:\s+[\u0391-\u03A1\u03A3-\u03A9]+)*\b)?)(?:\s+(?P<header2>.*))?'
new_df = df['header'].str.extract(rx, expand=True)

参见the regex demo .

你可以使用

df[['header1', 'header2']] = df['header'].str.extract(r'^\s*((?:[A-Z]+\b(?!\.)(?:\s+[A-Z]+)*)?)\s*(.*)', expand=True)

输出:

>>> df
header header1 header2
0 THIS IS an example THIS IS an example
1 ALSO this ALSO this
2 ONE LAST ONE LAST
3 J. one more J. one more

参见 regex demo .

详细信息:

  • ^ - 字符串的开始
  • \s* - 零个或多个空格
  • ((?:[A-Z]+\b(?!\.)(?:\s+[A-Z]+)*)?) - 第 1 组(header1): 一个或多个大写 ASCII 字母的可选序列(后面没有 . 字符),然后是零个或多个由一个或多个空格和一个或多个大写 ASCII 字母组成的序列
  • \s* - 零个或多个空格
  • (.*) - 第 2 组 (header2):除换行符以外的任何零个或多个字符,尽可能多。

您可以使用命名的捕获组提取到新的数据框:

>>> new_df = df['header'].str.extract(r'^\s*(?P<header1>(?:[A-Z]+\b(?!\.)(?:\s+[A-Z]+)*)?)\s*(?P<header2>.*)', expand=True)
>>> new_df
header1 header2
0 THIS IS an example
1 ALSO this
2 ONE LAST
3 J. one more

关于regex - 根据单词是否大写拆分 Pandas 数据框列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70345730/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com