python - 如何捕获带有符号前缀的模式?
问题描述
我正在使用 Python 中的正则表达式,并且在捕获某些模式时遇到了一些问题。
我需要捕获每个带有 '%' 前缀的标记,它可以以不同的方式出现,但我只需要收集以下标记:
case 1: %Y
case 2: -p %U %y %y %p asd%a%a
case 3: -p 8080 %M %a %x %y some_variable another_one %_capture_this %and_this %this%no neither%this %e
所以如果我使用re.findall
我应该得到:
output 1: ['%Y']
output 2: ['%U','%y','%y','%p']
output 3: ['%M','%a','%x','%y','%_capture_this','%and_this','%e']
我试过:
regex = r'(\%\w+)|(?:\%\w+\%\w+)|(?:\w+\%\w+)'
但它正在捕获asd%a%a
并%this%not
在两个组中(Demo)。
我需要排除两者,我该如何修复这个正则表达式?
提前致谢。
解决方案
您可以使用
re.findall(r'\B%\w+\b(?!%)', text)
查看正则表达式演示
正则表达式详细信息
\B
- 一个非单词边界,要求下一个%
不能在它之前有一个单词 char%
- 一个%
字符\w+
- 1+字字符(字母/数字/下划线)\b
- 一个单词边界,最后一个匹配的char\w+
后面不能跟一个单词char(必须使用它,因为后面有一个否定的lookahead\w+
以避免回溯)(?!%)
- 紧靠右边,必须没有%
字符。
推荐阅读
- sql-server - 在 SSIS SQL 命令中是什么?意味着在集合变量中
- r - 在离线计算机上安装“png”R 包时遇到问题
- android - 无法获取 com.opentok.android:opentok-android-sdk 错误
- azure - Azure 搜索中的表单识别器
- asp.net - Asp.net 5 处理多数据库结构
- r - 官员似乎默认有第一张幻灯片
- highcharts - HighCharts Base64 无法解码以转换为 .png 或 .jpg 图像
- selenium - 元素不可交互
- google-cloud-functions - 存储中的连接问题触发 GCF
- ios - 当接收者应用程序使用 XMPP iOS 处于终止模式时,如何获取消息传递回执?