使用Regex从字符串中提取子字符串

2024-04-20 13:20:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有个要求,我需要使用regex从字符串中提取子字符串。你知道吗

例如,以下是我的示例数据:

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

从这个示例数据中,我只需要提取第二次和第四次出现的双引号数据。你知道吗

我的要求是:you doing?

我尝试了下面的正则表达式,但我无法按照我的要求提取。你知道吗

"(.*?)"

Tags: 数据字符串you示例hellowhatareregex
3条回答

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

import re

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

print(result)

在这里,regex匹配双引号中包含的任意数量的字符,但是尝试尽可能少地匹配(一个非贪婪的匹配),否则我们将得到一个匹配"How" are "you" What "are" you "doing?"。你知道吗

输出:

['"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. 第二个双引号之后和第三个双引号之前的所有内容 ... 你知道吗

这意味着我们可以取每个偶数元素来得到引号中的元素。然后我们可以再次切片结果,得到第二和第四个结果。你知道吗

只有正则表达式的解决方案。可能不是100%准确,因为它匹配每一次出现,而不仅仅是第二次和第四次出现,但它适用于示例。你知道吗

"[^"]+"[^"]+("[^"]+")

JS演示:

我们可以尝试使用re.findall提取所有引用的术语。然后,仅使用结果列表中的偶数项构建字符串:

input = "Hello, \"How\" are \"you\" What \"are\" you \"doing?\""
matches = re.findall(r'\"([^"]+)\"', input)
matches = matches[1::2]
output = " ".join(matches)
print(output)

you doing?

相关问题 更多 >