python - 如果括号中存在其他字符串,则正则表达式捕获字符串
问题描述
我正在尝试创建一个 Python 正则表达式来捕获文件名,但前提是文本“external=true”出现在所谓的文件名之后的方括号内。
我相信我快到了,但缺少一个特定的用例。本质上,我想捕获qrcode:
和 first之间的文本[
,但前提是文本external=true
出现在两个方括号之间。
我创建了正则表达式qrcode:([^:].*?)\[.*?external=true.*?\]
,它不适用于下面的第二行:它错误地返回 vcard3.txt 并且不返回 vcard4.txt。
qrcode:vcard1.txt[external=true] qrcode:vcard2.txt[xdim=2,ydim=2]
qrcode:vcard3.txt[xdim=2,ydim=2] qrcode:vcard4.txt[xdim=2,ydim=2,external=true]
qrcode:vcard5.txt[xdim=2,ydim=2,external=true,foreground=red,background=white]
qrcode:https://www.github.com[foreground=blue]
解决方案
使用正向前瞻 (for qrcode:
) 和正向后视 (for[*external=true
与惰性匹配来捕获最小的此类组。
Regex101解释:https ://regex101.com/r/bOezIm/1
一个完整的python示例:
import re
pattern = r"(?<=qrcode:)[^:]*?(?=\[[^\]]*?external=true)"
string = """
qrcode:vcard1.txt[external=true] qrcode:vcard2.txt[xdim=2,ydim=2]
qrcode:vcard3.txt[xdim=2,ydim=2] qrcode:vcard4.txt[xdim=2,ydim=2,external=true]
qrcode:vcard5.txt[xdim=2,ydim=2,external=true,foreground=red,background=white]
qrcode:https://www.github.com[foreground=blue]
"""
print(re.findall(pattern, string))
推荐阅读
- javascript - How to avoid multiple scroll events in virtualisation in angular grid?
- bash - Redirect both stdout and stderr to file, print stdout only
- r - 包“fdapace”(R) - 如何访问功能主成分分析的主成分
- matrix - 方案中的矩阵乘法,列表列表
- mysql - How to store an Array in a table MySQL (For NodeJS)
- artifactory - Artifactory中柯南存储库中的不同结构
- react-native - 存储在本机反应的变量中
- sequelize.js - Sequlize.js how to get the records count inside an 'INCLUDE' clause
- fullcalendar - Fullcalendar.js get specific day of event on event click
- reactjs - 使用 user.name 等字段名称时出现 Redux 表单验证错误