python - 使用正则表达式从字符串中提取子字符串

标签 python regex shell extract

我有一个要求,我需要使用正则表达式从字符串中提取子字符串。

例如,这是我的示例数据:

Hello, "How" are "you" What "are" you "doing?"

从此示例数据中,我只需要提取第二次和第四次出现的双引号数据。

我的要求是:你在做什么?

我尝试使用以下正则表达式,但无法按照我的要求提取。

"(.*?)"

最佳答案

我们可以使用re.findall,然后对结果进行切片以获得第一个和第三个匹配项:

import re

string = 'Hello, "How" are "you" What "are" you "doing?"'
result = re.findall('".+?"', string)[1::2]

print(result)

这里,正则表达式匹配双引号内包含的任意数量的字符,但尝试匹配尽可能少的字符(非贪婪匹配),否则我们最终会得到一个匹配,“你”“怎么样”,你“在”做什么?

输出:

['"you"', '"doing?"']

如果您想在不使用引号的情况下组合它们,可以将 str.stripstr.join 一起使用:

print(' '.join(string.strip('"') for string in result))

输出:

you doing?

另一种方法是仅在 " 上进行拆分:

result = string.split('"')[1::2][1::2]
print(result)

输出:

['you', 'doing?']

这是有效的,因为如果用双引号分隔字符串,则输出将如下所示:

  1. 第一个双引号之前的所有内容
  2. 第一个双引号之后和第二个双引号之前的所有内容
  3. 第二个双引号之后和第三个双引号之前的所有内容 ...

这意味着我们可以使用每个偶数元素来获取引号中的元素。然后我们可以再次对结果进行切片以获得第二个和第四个结果。

关于python - 使用正则表达式从字符串中提取子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56160112/

相关文章:

python - tf 操作 control_inputs 与 inputs

python - 将应用程序或脚本转换为 shell 命令

linux - 通过变量访问 bash 位置参数

java - 如何在Gradle文件中的任务中执行多个Shell脚本

c++ - tr1::regex 正则表达式在嵌套大括号上抛出异常

c# - 使用 C# 自动超链接 URL 和电子邮件,同时保留定制标签

python - 如何抓取最近修改的文件

python - 在python中拼接二值图像

python - "next"参数,redirect,django.contrib.auth.login

regex - 如何重新排序字符串中的子字符串?