python 3.4的正则表达式

python 3.4的正则表达式,python,regex,python-3.4,python-module,rawstring,Python,Regex,Python 3.4,Python Module,Rawstring,谁能回答这个问题? 我正在尝试学习reg表达式(re)模块,但我无法理解这个模块。我正在尝试使用正则表达式来捕获所有3种文件名格式 Python 3.4.3 >>> re.findall("file[\_-]1","file-1 file_1, file\1") ['file-1', 'file_1'] >>> 为什么它不能捕获文件\1?? 我尝试了另外两种模式,但都不起作用:( 谢谢, Sagar反斜杠在正则表达式中也有意义;\仅表示文字下划线,不是下划

谁能回答这个问题? 我正在尝试学习reg表达式(re)模块,但我无法理解这个模块。我正在尝试使用正则表达式来捕获所有3种文件名格式

Python 3.4.3

>>> re.findall("file[\_-]1","file-1 file_1, file\1")
['file-1', 'file_1']
>>> 
为什么它不能捕获文件\1?? 我尝试了另外两种模式,但都不起作用:(

谢谢,
Sagar

反斜杠在正则表达式中也有意义;
\
仅表示文字下划线,不是下划线或反斜杠。相反,您需要
r'…'
(原始Python字符串)
\
(正则表达式中的文字反斜杠)。请注意,您尝试搜索的字符串也应为原始文本或具有双反斜杠:

>>> "file-1 file_1, file\1"
'file-1 file_1, file\x01'  # probably not what you expected...
>>> r"file-1 file_1, file\1"
'file-1 file_1, file\\1'
因此,您可以使用:

>>> re.findall(r"file[\\_-]1", r"file-1 file_1, file\1")
        # note ^       ^       ^
['file-1', 'file_1', 'file\\1']

反斜杠在Python字符串和正则表达式中有特殊的含义…例如,请参见“文件\1”中的
\1
是一个控制字符
\u0001;
。如果您确实打算捕获它,请使用
打印(关于findall(“文件[\u0001\u-]1?”,“文件-1文件\u 1,文件\1”))
,但我怀疑您是否需要它。我正在阅读您提到的python文档。在这一行“……但是,要将其表示为python字符串文字,必须再次转义这两个反斜杠。”以及在字符集[]中使用反斜杠时它们的特殊含义应该马上消失..所以我的正则表达式可以安全地是:re.findall(“file[\]1”,“file-1 file\u 1,file\1”)…当然这不起作用。其次,如果我对正则表达式使用原始字符串,那么字符的特殊性会自动正确地省略?因此它将是:re.findall(r“file[\]1”,“file-1 file\u 1,file\1”)为什么原始字符串+额外\@SagarKarale在方括号内只有regex特殊含义被删除。您仍然需要将反斜杠加倍或使其成为原始字符串以删除字符串文字的特殊含义。谢谢Jon..没有更多的示例说明这一点…我必须给出“字符串文字”和“regex表达式”比以前多想一点。。。
>>> re.findall(r"file[\\_-]1", r"file-1 file_1, file\1")
        # note ^       ^       ^
['file-1', 'file_1', 'file\\1']