Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “a”究竟是什么;原始字符串regex";你如何使用它?_Python_Regex_Python Module_Rawstring - Fatal编程技术网

Python “a”究竟是什么;原始字符串regex";你如何使用它?

Python “a”究竟是什么;原始字符串regex";你如何使用它?,python,regex,python-module,rawstring,Python,Regex,Python Module,Rawstring,从上的python文档中,关于'\'字符: s = "\\n" print len(s), s 2 \n prog = re.compile(chr(92)+chr(110)) prog = re.compile("\\n") prog = re.compile(r"\n") 解决方案是将Python的原始字符串表示法用于正则表达式 表达模式;反斜杠不会以任何特殊方式处理 前缀为'r'的字符串文字。所以r“\n”是一个两个字符的字符串 包含\'和'n',而“\n”是一个单字符字符串 包含换

从上的python文档中,关于
'\'
字符:

s = "\\n"
print len(s), s

2 \n
prog = re.compile(chr(92)+chr(110))
prog = re.compile("\\n")
prog = re.compile(r"\n")
解决方案是将Python的原始字符串表示法用于正则表达式 表达模式;反斜杠不会以任何特殊方式处理 前缀为
'r'
的字符串文字。所以
r“\n”
是一个两个字符的字符串 包含
\'
'n'
,而
“\n”
是一个单字符字符串 包含换行符的。通常模式将用Python表示 使用此原始字符串表示法的代码

这个原始字符串符号是什么?如果使用原始字符串格式,是否意味着
“*”
将被视为文字字符,而不是零或多个指示符?这显然不可能是正确的,否则正则表达式将完全失去其功能。但是如果是原始字符串,如果
“\n”
是反斜杠和
“n”
,它如何识别换行符呢

我不明白

编辑悬赏:


我试图理解原始字符串正则表达式是如何匹配换行符、制表符和字符集的,例如,如果原始字符串模式不能识别反斜杠为普通字符以外的任何字符,那么单词是
\w
,数字是
\d
,等等。我真的可以用一些很好的例子。

使用普通字符串编写包含
\
的正则表达式的问题是,您最终必须为每个
\
编写
\
。因此字符串文本
“stuff\\things”
r“stuff\things”
生成相同的字符串。如果您想编写一个与反斜杠匹配的正则表达式,这一点尤其有用

使用普通字符串,与字符串
\
匹配的regexp将是
“\\\\”

为什么??因为我们必须转义
\
两次:一次用于正则表达式语法,一次用于字符串语法

可以使用三重引号包括换行符,如下所示:

r'''stuff\
things'''
请注意,python通常将
\
-newline视为行的延续,但在原始字符串中并非如此。还要注意的是,反斜杠仍然在原始字符串中转义引号,但它们本身是保留的。因此原始字符串文本
r“\”
生成字符串
\”
。这意味着您不能以反斜杠结束原始字符串文字


有关更多信息,请参阅。

Zarkonnen的回答确实回答了您的问题,但不是直接回答。让我试着更直接一点,看看能不能从Zarkonnen那里拿到赏金

如果停止使用术语“原始字符串正则表达式”和“原始字符串模式”,您可能会发现这更容易理解。这些术语合并了两个独立的概念:Python源代码中特定字符串的表示形式,以及该字符串表示的正则表达式

事实上,把它们看作两种不同的编程语言是很有帮助的,每种语言都有自己的语法。Python语言有一些源代码,其中包括构建具有特定内容的字符串,并调用正则表达式系统。正则表达式系统具有驻留在字符串对象中并与字符串匹配的源代码。两种语言都使用反斜杠作为转义字符

s = "\n"
print len(s), s

1 
 
首先,要理解字符串是一个字符序列(即字节或Unicode代码点;这里的区别并不重要)。在Python源代码中有许多表示字符串的方法。原始字符串只是这些表示形式之一。如果两种表示法产生相同的字符序列,则它们产生相同的行为

设想一个2个字符的字符串,由反斜杠字符和n字符组成。如果您知道反斜杠的字符值为92,n的字符值为110,则此表达式将生成字符串:

s = chr(92)+chr(110)
print len(s), s

2 \n
传统的Python字符串表示法
“\n”
不会生成此字符串。相反,它生成一个带有换行符的单字符字符串。例如,“反斜杠(\)字符用于转义具有特殊含义的字符,例如换行符、反斜杠本身或引号字符。”

(请注意,在本例中,换行符不可见,但如果仔细观察,“1”后面会出现一个空行。)

要获得两个字符串,我们必须使用另一个反斜杠字符来转义原始反斜杠字符的特殊含义:

s = "\\n"
print len(s), s

2 \n
prog = re.compile(chr(92)+chr(110))
prog = re.compile("\\n")
prog = re.compile(r"\n")
如果要表示包含许多反斜杠字符的字符串,该怎么办?继续,“字符串文字可以选择性地以字母“r”或“r”作为前缀;此类字符串称为原始字符串,并使用不同的规则来解释反斜杠转义序列。”以下是使用原始字符串表示法的两个字符串:

s = r"\n"
print len(s), s

2 \n
因此,我们有三种不同的字符串表示形式,都给出相同的字符串或字符序列:

print chr(92)+chr(110) == "\\n" == r"\n"
True
现在,让我们转到正则表达式。“正则表达式使用反斜杠字符(“\”)来表示特殊形式,或者允许在不调用特殊含义的情况下使用特殊字符。这与Python在字符串文本中使用相同字符的相同用途相冲突…”

如果需要一个与换行符匹配的Python正则表达式对象,则需要一个2字符的字符串,由反斜杠字符和n字符组成。以下代码行均将prog设置为识别换行符的正则表达式对象:

s = "\\n"
print len(s), s

2 \n
prog = re.compile(chr(92)+chr(110))
prog = re.compile("\\n")
prog = re.compile(r"\n")
那为什么呢?因为正则表达式通常是静态字符串,可以方便地表示为字符串文本。从可用的不同字符串文字符号来看,当正则表达式包含反斜杠字符时,原始字符串是一个方便的选择

s = "\n"
print len(s), s

1 
 
问题

Q:表达式
re.co如何