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='.'>