我有3个字符串
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的建议('没有\ s +传递|传递:?\ s +([A-Z] +)')
答案 0 :(得分: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
答案 1 :(得分:1)
这里使用match
not OK。对于这种情况,最好使用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)
,但不幸的是当前版本的正则表达式引擎不支持无限外观。
答案 2 :(得分:1)
首先,解决方案是过滤掉所有不包含'no pass'的内容,然后搜索pass。做两个步骤可能看起来有点沉重,但通过这种方式做到这一点可以避免很多问题。你试图同时解决两个问题(显然你正在努力做到这一点)所以只是将这两个问题分开。