Python-从.txt获取正则表达式

Python-从.txt获取正则表达式,python,regex,Python,Regex,如何在Python中打开一个.txt文件并获得文件中的确切字符串 我有一个包含正则表达式的文本文件,例如: \\*(.*?)\\n 当我用Python打开文件时: open('regEx.txt', 'r') 我得到: \\\\*(.*?)\\\\n 是否有办法打开此文件并获得与文件中写入的字符串完全相同的字符串?您很可能获得与文件中完全相同的数据(行尾除外,但这不是问题所在)。问题在于数据的显示。你在壳牌公司工作吗?它输出转义序列,除非您明确使用print 尝试print open('r

如何在Python中打开一个.txt文件并获得文件中的确切字符串

我有一个包含正则表达式的文本文件,例如:

\\*(.*?)\\n
当我用Python打开文件时:

open('regEx.txt', 'r')
我得到:

\\\\*(.*?)\\\\n

是否有办法打开此文件并获得与文件中写入的字符串完全相同的字符串?

您很可能获得与文件中完全相同的数据(行尾除外,但这不是问题所在)。问题在于数据的显示。你在壳牌公司工作吗?它输出转义序列,除非您明确使用
print


尝试
print open('regEx.txt','rb')。read()
甚至
open('regEx2.txt','wb')。write(open('regEx.txt','rb')。read())
。regEx2.txt将与regEx.txt相同。

您很可能获得的数据与文件中的数据完全相同(除了行尾,但这不是问题所在)。问题在于数据的显示。你在壳牌公司工作吗?它输出转义序列,除非您明确使用
print


尝试
print open('regEx.txt','rb')。read()
甚至
open('regEx2.txt','wb')。write(open('regEx.txt','rb')。read())
。regEx2.txt将与regEx.txt相同。

我认为这不是一个问题,请比较以下内容:

»»» regex # as read from the file
Out[9]: '\\*(.*?)\\n\n'

»»» r=r'\*(.*?)\n'

»»» r
Out[11]: '\\*(.*?)\\n'

除了换行符(这是我的错,我把它放在了文件中)之外,它们在内部是相同的。

我认为这不是问题,比较一下:

»»» regex # as read from the file
Out[9]: '\\*(.*?)\\n\n'

»»» r=r'\*(.*?)\n'

»»» r
Out[11]: '\\*(.*?)\\n'

除了换行符(这是我的错,我把它放在了文件中)之外,它们在内部是相同的。

您在这里稍微混淆了一些字符串表示。实际的正则表达式(忽略任何特定于语言的奇怪之处)将是

\*(.*?)\n
(按字面意思是这9个字符)

但是,我想您可能一直在使用Java或Python而没有原始字符串。在这种情况下,要在内存中创建上述字符串,代码必须将反斜杠加倍:

"\\*(.*?)\\n"
这是因为,如果不将它们加倍,Python在编译字符串时就会删除它们。但是现在字符串又被编译为这9个字符:
\*(.*?)\n
。如果把这些打印出来,你会得到一个包括双反斜杠的显示。但是如果你调用
len(string)
它会说
9
,而不是
11

所以你只需要9个字符。那为什么要在你的文件中写11呢?如果您写11,那么在显示时反斜杠将再次双转义。但是在打开
的结果时调用
len(输入)
。它将显示
11
,而不是
15

这也是为什么在代码中定义正则表达式时应该始终使用原始字符串的原因。那么您就不需要任何额外的转义(引号除外):


这将再次给您留下9个字符(因为在编译字符串时反斜杠保持不变)。

您在这里稍微混淆了一些字符串表示形式。实际的正则表达式(忽略任何特定于语言的奇怪之处)将是

\*(.*?)\n
(按字面意思是这9个字符)

但是,我想您可能一直在使用Java或Python而没有原始字符串。在这种情况下,要在内存中创建上述字符串,代码必须将反斜杠加倍:

"\\*(.*?)\\n"
这是因为,如果不将它们加倍,Python在编译字符串时就会删除它们。但是现在字符串又被编译为这9个字符:
\*(.*?)\n
。如果把这些打印出来,你会得到一个包括双反斜杠的显示。但是如果你调用
len(string)
它会说
9
,而不是
11

所以你只需要9个字符。那为什么要在你的文件中写11呢?如果您写11,那么在显示时反斜杠将再次双转义。但是在打开
的结果时调用
len(输入)
。它将显示
11
,而不是
15

这也是为什么在代码中定义正则表达式时应该始终使用原始字符串的原因。那么您就不需要任何额外的转义(引号除外):


这将再次给您留下9个字符(因为在编译字符串时,反斜杠保持不变)。

您得到的结果与编写的完全相同。您不希望文件中出现双反斜杠。只有将它们作为非原始字符串编写时,才会在Python代码中使用它们。非常感谢你的帮助。我一直在寻找关于从文本文件加载正则表达式以及如何解决这个问题的帖子,但我没有找到这篇。我使用这个正则表达式测试器来检查我从文件中加载的字符串是否有效,但它不起作用,所以我寻找答案,但现在我得到了答案。非常感谢大家。你确实得到了它写得一模一样。您不希望文件中出现双反斜杠。只有将它们作为非原始字符串编写时,才会在Python代码中使用它们。非常感谢你的帮助。我一直在寻找关于从文本文件加载正则表达式以及如何解决这个问题的帖子,但我没有找到这篇。我使用这个正则表达式测试器来检查我从文件中加载的字符串是否有效,但它不起作用,所以我寻找答案,但现在我得到了答案。谢谢大家。