我需要匹配任何以:
开头的字符串'/Engine
并以:
结束ir_vrn'
我用过这个:
vrn_page = re.compile('\'/Engine[a-zA-Z0-9._+-&/?:=]+ir_vrn\'')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/re.py", line 190, in compile
return _compile(pattern, flags)
File "/usr/lib/python2.6/re.py", line 245, in _compile
raise error, v # invalid expression
sre_constants.error: bad character range
但不适用于此字符串:
'/Engine/page/im/pop_mostra.php?P_=9078&P_Utentevisitatore=1702795&loto=http://s1.example.com/utloto/9/9078/Media/7df4164ecb81a5992280a1ce81120d05-3a5fa4377a23242690a273a82ea5d607&type=ir_vrn'
答案 0 :(得分:4)
尝试:
/发动机。*?ir_vrn
注意问号。这确保了
/引擎和放大器; ^&放大器;的 ^&安培; 的^&安培;!ir_vrn @ $ @#$ @#ir_vrn @#@#
它只捕获
/引擎&安培; ^&安培; ^&安培; ^&安培; ir_vrn
而不是
/引擎&安培; ^&安培; ^&安培; ^&安培; ir_vrn @ $ @#$ @#ir_vrn
答案 1 :(得分:2)
为什么不^\'/Engine.*ir_vrn\'$
?
答案 2 :(得分:2)
它不起作用,因为你对中间部分的限制太多了。试试这个(.
代表正则表达式中的“任何字符”):
\'/Engine.+?ir_vrn\'
此外,您可能希望锚定正则表达式,如果它只应匹配不仅包含此模式但完全符合指定的字符串。锚定的正则表达式将是这样的:
^\'/Engine.+ir_vrn\'$
答案 3 :(得分:2)
>>> import re
>>> regexp = "'/Engine.*ir_vrn'"
>>> re.match(regexp, "'/Engineir_vrn'")
<_sre.SRE_Match object at 0x101e2f9f0>
>>> re.match(regexp, "'/Engine/page/im/pop_mostra.php?P_=9078&P_Utentevisitatore=1702795&loto=http://s1.example.com/utloto/9/9078/Media/7df4164ecb81a5992280a1ce81120d05-3a5fa4377a23242690a273a82ea5d607&type=ir_vrn'")
<_sre.SRE_Match object at 0x101e2f988>
>>>
答案 4 :(得分:0)
('\'/Engine[a-zA-Z0-9._+-&/?:=]+ir_vrn\'')
存在问题,因为?:
,+
,-
和.
在python正则表达式中具有特定含义。你逃脱了/
,但没有逃脱失败的其他角色。
此外,您正在滥用字符范围:
[A-Za-z0-9]+
将匹配一个或多个字母数字字符。 [a-zA-Z0-9.]
在语法上是不正确的。 [a-zA-Z0-9\.]
有效。由于您希望可打印的字符\S
效果良好。
vrn_page = re.compile(r'\/Engine\S+ir_vrn')