我有一个要求,我需要使用正则表达式从字符串中提取子字符串。
例如,这是我的示例数据:
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.strip
与 str.join
一起使用:
print(' '.join(string.strip('"') for string in result))
输出:
you doing?
另一种方法是仅在 "
上进行拆分:
result = string.split('"')[1::2][1::2]
print(result)
输出:
['you', 'doing?']
这是有效的,因为如果用双引号分隔字符串,则输出将如下所示:
- 第一个双引号之前的所有内容
- 第一个双引号之后和第二个双引号之前的所有内容
- 第二个双引号之后和第三个双引号之前的所有内容 ...
这意味着我们可以使用每个偶数元素来获取引号中的元素。然后我们可以再次对结果进行切片以获得第二个和第四个结果。
关于python - 使用正则表达式从字符串中提取子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56160112/