首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将regex pattern.finditer写入数据格式

如何将regex pattern.finditer写入数据格式
EN

Stack Overflow用户
提问于 2021-04-21 09:08:45
回答 1查看 269关注 0票数 2

我正在尝试编写一个正则表达式来从一个语料库中选择我想要的文本,然后用CSV格式将提取的文本写成一个数据格式。

下面是我使用的代码:

代码语言:javascript
复制
import re

import pandas as pd

def main():

    pattern = re.compile(r'(case).(reason)(.+)(})')

    with open('/Users/cleantext.txt', 'r') as f:
        content = f.read()
        matches = pattern.finditer(content)
        for match in matches:
            print(tuple(match.groups()))


    # Create a DF for the expenses
    df = pd.DataFrame(data=[tuple(match.groups())])

    df.to_csv("judgement.csv", index=True)

if __name__ == '__main__':
     main()

然而,CSV只返回一行输出:

代码语言:javascript
复制
,0,1,2,3
0,xxx,yyy,zzz,}

我期待多行,因为语料库中至少有100项司法判决。

原始语料库看起来是这样的:

代码语言:javascript
复制
{mID a9d50454f624         case xxx reason yyy judgement zzz}
{mID a9d5049e34e934bff9b  case xxx reason yyy judgement zzz}
{mID a67c9e34e934bff9b    case xxx reason yyy judgement zzz}

非常感谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-21 09:15:17

您可能需要从每个匹配中获得表示casereason的两个子字符串。您可以使用

代码语言:javascript
复制
pattern = re.compile(r'\bcase\s*(?P<Case>.*?)\s*reason\s*(?P<Reason>.*?)\s*judgement')
matches = [x.groupdict() for x in pattern.finditer(content)]
df = pd.DataFrame(matches)

注意,命名捕获组用于自动创建列名,x.groupdict()返回包含组名及其值的元组。[x.groupdict() for x in pattern.finditer(content)]返回一个列表字典,可用于填充数据。

您也可以使用

代码语言:javascript
复制
matches = pattern.findall(content)
df=pd.DataFrame(matches, columns=['Case', 'Reason'])

regex演示。详细信息

  • \bcase -一个完整的词case
  • \s* -零或多个空白空间
  • (?P<Case>.*?) -组"Case":除断行字符以外的零或多个字符,尽可能少
  • \s*reason\s* -用可选空格括起来的reason单词
  • (?P<Reason>.*?) -组“原因”:除行中断字符以外的零或多个字符,尽可能少。
  • \s*judgement -零或多个空白空间,然后是judgement字符串。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67192686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档