gpt4 book ai didi

python-3.x - 如何使用 `re.findall`从字符串中提取数据

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

我有以下字符串(文件):

s = '''
\newcommand{\commandName1}{This is first command}

\newcommand{\commandName2}{This is second command with {} brackets inside
in multiple lines {} {}
}

\newcommand{\commandName3}{This is third, last command}

'''

现在我想使用 Python re 包将数据提取到字典中,其中 key 是命令名称 (\commandName1, \commandName2 and \commandName3) 和值是 This is first command, This is second command with {} inside in multiple行 {} {}This is third, last command。我试过:

re.findall(r'\\newcommand{(.+)}{(.+)}', s)

但它不起作用,因为第二个命令内部有 {}。最简单的方法是什么?

最佳答案

你可以使用这个正则表达式:

(?s)\\newcommand{([^}]+)}{(.+?)}(?=\s*(?:\\newcommand|$))

RegEx Demo

Code Demo

正则表达式分解:

  • (?s): 启用 DOTALL(单行)模式
  • \\newcommand:
  • {:匹配一个{
  • ([^}]+):匹配捕获组 #1 中的 1+ 个不是 { 的字符
  • :匹配一个
  • {:匹配一个{
  • (.+?):匹配捕获组 #2 中的 1+ 个任意字符
  • :匹配一个
  • (?=\s*(?:\\newcommand|$)):先行断言存在 0 个或多个空格和 \newcommand 否则结束输入。

代码:

import re

s = r'''
\newcommand{\commandName1}{This is first command}

\newcommand{\commandName2}{This is second command with {} brackets inside
in multiple lines {} {}
}

\newcommand{\commandName3}{This is third, last command}
'''

print (re.findall(r'(?s)\\newcommand{([^}]+)}{(.+?)}(?=\s*(?:\\newcommand|$))', s))

关于python-3.x - 如何使用 `re.findall`从字符串中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74086484/

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