2012-12-14 97 views
0

如何在Python中打开.txt文件并获取文件中的确切字符串?Python - 从.txt获取正则表达式

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

\\*(.*?)\\n 

当我打开Python中的文件:

open('regEx.txt', 'r') 

我越来越:

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

有一种打开这个文件的方式,并获得完全按照文件中写入的字符串?

+5

你完全按照书面材料得到它。你不想在文件中使用双反斜杠。如果您将它们编写为非原始字符串,则它们仅在Python代码中使用。 [看到这个持续的问题的进一步信息](http://stackoverflow.com/questions/12871066/what-exactly-is-a-raw-string-regex-and-how-can-you-use-it) –

+0

谢谢很多的帮助。我正在寻找关于从文本文件加载正则表达式以及如何解决这个问题的帖子,我还没有找到这个。我使用这个正则表达式测试程序http://re-try.appspot.com/来检查从文件加载的字符串是否可以正常工作,并且它不起作用,所以我寻找答案,但现在我明白了。非常感谢大家。 – user1863555

回答

2

您在这里稍微混合了几个字符串表示形式。实际的正则表达式(不考虑任何特定语言的怪事),简直是

\*(.*?)\n 

(字面的9个字符)

不过,我想你已经不是被使用Java或Python没有原始字符串。在这种情况下,创建上面的字符串在内存中的代码具有了反斜杠:

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

这是因为,如果没有他们的两倍,巨蟒将已编译字符串时将其删除。但现在字符串再次编译为这9个字符:\*(.*?)\n。如果打印出来,你会得到(如jd。所示)包括双反斜杠的显示。但是如果您拨打len(string),它会说9,而不是11

所以你只需要9个字符。那么为什么要在你的文件中写11呢?如果你写十一,然后显示反斜杠将再次逃脱。但open的结果请致电len(input)。它会说11,而不是15

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

r"\*(.*?)\n" 

这将再次给您留下9个字符(因为反斜线在弦上的编译保持不变)。

3

你很可能完全按照它在文件中的方式获取数据(除了可能的行结束符,但这不是问题)。问题就在于显示这些数据。你在壳里工作吗?它输出转义序列,除非明确使用print

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

0

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

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

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

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

除了新行(这是我的错,我把它在文件中),它们是相同的内部。