Python正则表达式排除匹配字符串
我有三个字符串
a ="keep the your pass ABCDEFG other text"
b ="your pass: TESTVALUE other text"
c ="no pass required other text"
我想在通过的情况下获取大写字母的值,像这样
re.match(r'.*\spass:?\s([a-zA-Z]+).*',a,re.I).group(1)
re.match(r'.*\spass:?\s([a-zA-Z]+).*',b,re.I).group(1)
但是我想排除“没有通过”,也就是说我不想让正则表达式匹配到“c”这个字符串,我该怎么做呢?
解决方案:感谢eyquem和ovgolovin
我会采用eyquem的建议,使用正则表达式re.search('no\s+pass|pass:?\s+([A-Z]+)')
3 个回答
1
一个解决办法是,先过滤掉所有不包含“未通过”的内容,然后再去找“通过”的内容。虽然这样分成两个步骤看起来有点麻烦,但这样做可以避免很多问题。你现在试图同时解决两个问题(而且看起来你有点困难),所以不如把这两个问题分开来处理。
1
在这里使用 match
是不合适的。对于这种情况,使用 search
更好。
re.search(r'(?<!no\s)pass:?\s+([A-Z]+)',a).group(1)
这样写会更好:
re.search(r'(?<!no\s*)pass:?\s+([A-Z]+)',a).group(1)
不过很遗憾,目前的正则表达式引擎不支持无限的回顾。
3
import re
for x in ("keep the your pass ABCDEFG other text",
"your pass: TESTVALUE other text",
"no pass required other text"):
print re.search('no\s+pass|pass:?\s+([A-Z]+)',x).group(1)
A-Z]+)'
结果
ABCDEFG
TESTVALUE
None