"filename" 在Python中,我做了这段代码: print(re.fin-6ren">
gpt4 book ai didi

python - 在正则表达式中,如何匹配字符串的两种不同情况

转载 作者:行者123 更新时间:2023-12-01 01:15:37 24 4
gpt4 key购买 nike

我正在尝试使用 ls 命令从文件列表中获取字符串。我有两个案例:

"filename"
"link File" -> "filename"

在Python中,我做了这段代码:

print(re.findall( r'"(.*?)"', linha))

我所做的 RE:

"(.*?)"               -: match ['filename']                CORRECT
['link File" -> "filename'] WRONG
"(.*?)" -> "(.*?)" -: match [''] WRONG
['link File', 'filename'] CORRECT

在同一个 RE 中获得此结果的 RE 是什么:

                      -: match ['filename', '']            CORRECT
['link File', 'filename'] CORRECT

最佳答案

您有一个可选部分,因此如果存在,请使用 ? 来匹配它。接下来,您希望从匹配中排除 ",因为您的目标被引号包围。这使得正则表达式引擎更容易匹配您的字符串:

"([^"]*)"(?: -> "([^"]*)")?

(?:...) 分组是非捕获的,? 使其成为可选。

当您将其与 re.findall() 一起使用时,您将始终获得具有两组的元组,对于 -> "..."的输入,第二组为空。缺少:

>>> import re
>>> re.findall(r'"([^"]*)"(?: -> "([^"]*)")?', '"filename"')
[('filename', '')]
>>> re.findall(r'"([^"]*)"(?: -> "([^"]*)")?', '"link File" -> "filename"')
[('link File', 'filename')]

我创建了an online demonstration with Regex101 (出于某种原因,这要求我们显式转义双引号,而不是 Python 实际需要的)。它包含右侧“解释”横幅下的模式分割。

关于python - 在正则表达式中,如何匹配字符串的两种不同情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54378998/

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