我试图匹配文字字符串' \ $'。我逃避了这两个人的行为。和' $'用反斜杠。当我逃避模式中的反斜杠时,为什么不工作?但如果我使用一个点,那么它就可以了。
import re
print re.match('\$','\$')
print re.match('\\\$','\$')
print re.match('.\$','\$')
输出:
None
None
<_sre.SRE_Match object at 0x7fb89cef7b90>
有人可以解释内部发生的事情吗?
答案 0 :(得分:3)
您应该使用re.escape()功能:
<强>逃逸(字符串)强>
返回字符串,所有非字母数字反向;这很有用 如果你想匹配可能有常规的任意文字字符串 表达元字符。
例如:
import re
val = re.escape('\$') # val = '\\\$'
print re.match(val,'\$')
输出:
<_sre.SRE_Match object; span=(0, 2), match='\\$'>
这相当于answer中提到的@TigerhawkT3
。
答案 1 :(得分:3)
不幸的是,你需要更多的反斜杠。您需要转义它们以指示它们是字符串中的文字并将它们放入表达式中,然后进一步转义它们以指示它们是文字而不是正则表达式特殊字符。这就是原始字符串经常用于正则表达式的原因:反斜杠不会爆炸。
>>> import re
>>> print re.match('\$','\$')
None
>>> print re.match('\\\$','\$')
None
>>> print re.match('.\$','\$')
<_sre.SRE_Match object at 0x01E1F800>
>>> print re.match('\\\\\$','\$')
<_sre.SRE_Match object at 0x01E1F800>
>>> print re.match(r'\\\$','\$')
<_sre.SRE_Match object at 0x01E1F800>
答案 2 :(得分:1)
在(非原始)字符串文字中,反斜杠很特殊。这意味着Python解释器应该特别处理以下字符。例如,"\n"
是一个长度为1的字符串,其中包含换行符。 "\$"
是一个单个字符的字符串,即美元符号。 "\\$"
是一个由两个字符组成的字符串:反斜杠和美元符号。
在正则表达式中,反斜杠也意味着要特别处理以下字符,但一般来说特殊含义是不同的。在正则表达式中,$
匹配行的结尾,\$
匹配美元符号,\\
匹配单个反斜杠,\\$
匹配末尾的反斜杠一条线。
因此,当您执行re.match('\$',s)
时,Python解释器会读取'\$'
以构造字符串对象$
(即长度为1),然后将该字符串对象传递给re.match
。使用re.match('\\$',s)
Python生成一个字符串对象\$
(长度为2)并将该字符串对象传递给re.match
。
要查看实际传递给re.match
的内容,只需打印即可。例如:
pat = '\\$'
print "pat :" + pat + ":"
m = re.match(pat, s)
人们通常使用原始字符串文字来避免反斜杠的双重含义。
pat = r'\$' # same 2-character string as above
答案 3 :(得分:0)
r'string'
是原始字符串
尝试注释你的正则表达式字符串
这里有与原始注释相同的重复
print( re.match(r'\\\$', '\$'))
<_sre.SRE_Match object; span=(0, 2), match='\\$'>
print( re.match('\\\$', '\$'))
None
这是因为
而导致的python3答案 4 :(得分:0)
感谢您的上述答案。我正在添加这个答案,因为我们在上面的答案中没有简短的摘要。
反斜杠class yourUserController {
use AuthenticatesAndRegistersUsers, ThrottlesLogins;
.....
protected $loginView = 'your path';
}
需要在python字符串和regex引擎中进行转义。
Python字符串会将2 \
翻译为1 \\
。正则表达式引擎需要2 \
才能匹配1 \\
因此,要为正则表达式引擎提供2 \
以匹配1 \\
,我们将不得不在python字符串中使用4 \
。
\\\\
- &gt; Python(字符串翻译)---&gt; \\\\
---&gt;正则表达式引擎(翻译)---&gt; \\
答案 5 :(得分:-1)
你必须使用。作为。匹配除换行符之外的任何字符。