Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.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 为什么重新搜索(';\';,';';';)不返回无?_Python_String_Re - Fatal编程技术网

Python 为什么重新搜索(';\';,';';';)不返回无?

Python 为什么重新搜索(';\';,';';';)不返回无?,python,string,re,Python,String,Re,我想检查字符串是否包含句号。我知道我能行 import re 重新搜索(重新转义('.'),'.')) 或者,相当于 >>> re.search(re.escape('.'), '.') <re.Match object; span=(0, 1), match='.'> >>重新搜索('\\.','.')) 我也可以使用一个原始字符串 >>> re.search('\\.', '.') <re.Match object; span=(

我想检查字符串是否包含句号。我知道我能行

import re
重新搜索(重新转义('.'),'.')) 或者,相当于

>>> re.search(re.escape('.'), '.')
<re.Match object; span=(0, 1), match='.'>
>>重新搜索('\\.','.'))
我也可以使用一个原始字符串

>>> re.search('\\.', '.')
<re.Match object; span=(0, 1), match='.'>
>>重新搜索(r'\.','..)
但是为什么呢

>>> re.search(r'\.', '.')
<re.Match object; span=(0, 1), match='.'>
>>重新搜索(“\”,“.”)
还工作吗?Python是否隐式地将其转换为原始字符串

Python是否隐式地将其转换为原始字符串

\.
不是一个字符,因此Python隐式地假定一个实际的
\
字符(也称
\.
)并触发一个
弃用警告
,但是由于默认情况下这些字符是静默的,所以您只会得到“工作版本”

下面是启用
DeprecationWarning
s(从技术上讲,所有警告都是这样)时会发生的情况:

❯ python-q-Wd
>>> '\.'
:1:弃用警告:转义序列无效\。
'\\.'
另外,“原始字符串”不是一种类型,它只是一种语法上的方便。“raw”和“non-raw”字符串都会生成字符串对象,它们只会更改字符串文本的解析方式

Python是否隐式地将其转换为原始字符串

\.
不是一个字符,因此Python隐式地假定一个实际的
\
字符(也称
\.
)并触发一个
弃用警告
,但是由于默认情况下这些字符是静默的,所以您只会得到“工作版本”

下面是启用
DeprecationWarning
s(从技术上讲,所有警告都是这样)时会发生的情况:

❯ python-q-Wd
>>> '\.'
:1:弃用警告:转义序列无效\。
'\\.'

另外,“原始字符串”不是一种类型,它只是一种语法上的方便。“原始”和“非原始”字符串都会生成字符串对象,它们只是改变字符串文本的解析方式。

因为
\\.
基本上是一个
,它与右侧的
匹配,因为
'\.='\.='\.==r'\.
这三个字符串文本表达式创建了完全相同的字符串。注意,它不会隐式地将任何内容转换为原始字符串,这没有真正意义,原始字符串不是字符串的一种类型,它是一种生成字符串对象的文本表达式。其他字符串文本产生的相同类型
'\.='\.='\..
我发现这令人惊讶,但它有意义,谢谢!因为
\.
基本上是一个
并且它与右侧的
匹配,因为
'\.='\.='\.='\.='\.='\.==r'\.
这三个字符串文字表达式创建了完全相同的字符串。注意,它不会隐式地将任何内容转换为原始字符串,这没有真正意义,原始字符串不是字符串的一种类型,它是一种生成字符串对象的文本表达式。其他字符串文本产生的相同类型
'\.='\.='\..
我发现这令人惊讶,但它有意义,谢谢!
>>> re.search('\.', '.')
<re.Match object; span=(0, 1), match='.'>