gpt4 book ai didi

python - 如何用正则表达式同时搜索两个可能的引号?

转载 作者:行者123 更新时间:2023-11-28 16:57:02 25 4
gpt4 key购买 nike

如果它们是一两个单词长,我想提取引号中的单词。这适用于以下代码。

mysentences = ['Kids, you "tried" your "best" and you failed miserably. The "lesson" is, "never try."', 
"Just because I don’t 'care' doesn’t mean I don’t understand."]
quotation = []
rx = r'"((?:\w+[ .]*){1,2})"'
for sentence in mysentences:
quotation.append(re.findall(rx, sentence))
print(quotation)

但这并没有让我从第二句中得到“关心”,因为第二句用双引号引起来。我可以通过以下方式获得它

r"'((?:\w+[ .]*){1,2})'"

问题是,怎样才能加入条件呢?与

rx = r'"((?:\w+[ .]*){1,2})"' or r"'((?:\w+[ .]*){1,2})'"

它只会让我得到第一个提到的条件。

最佳答案

使用您当前的模式,您可以使用 capturing group和反向引用 \1 以匹配随附的单引号或双引号。

比赛现在将进入第二个捕获组。

(['"])((?:\w+[ .]*){1,2})\1

Regex demo

请注意,重复字符类 [ .]* 也可能匹配例如 never try... ....

如果你想匹配 1 或 2 个单词,最后可以有一个可选的点,你可以匹配 1+ 个单词字符后跟一个可选组来匹配 1+ 个空格和 1+ 个单词字符后跟一个可选的点。

(['"])(\w+(?: +\w+)?\.?)\1

Regex demo

例如

import re
mysentences = ['Kids, you "tried" your "best" and you failed miserably. The "lesson" is, "never try."',
"Just because I don’t 'care' doesn’t mean I don’t understand."]
quotation = []
rx = r"(['\"])((?:\w+[ .]*){1,2})\1"
for sentence in mysentences:
for m in re.findall(rx, sentence):
quotation.append(m[1])

print(quotation)

结果

['tried', 'best', 'lesson', 'never try.', 'care']

关于python - 如何用正则表达式同时搜索两个可能的引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57338624/

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