我正在尝试从.txt文件中删除遵循模式的字符,但我的正则表达式搜索未返回任何字符。文本文件中的字符与命令提示符中打印出的字符不同。我对此并不陌生,只了解有关编码和解码的常识。
我相信txt文件是使用ANSI(Windows-1252)编码的,并且我使用的是python3。我尝试使用几种正则表达式模式进行搜索。在RegExr中进行测试时,每个正则表达式都可以正常工作,因此我认为不是问题所在。
txt文件是bulk_extractor输出文件,看起来像这样:
# BANNER FILE NOT PROVIDED (-b option)
# BULK_EXTRACTOR-Version: 1.5.5 ($Rev: 10844 $)
# Feature-Recorder: email
# Filename: W:\Migration\2010013\Working
# Feature-File-Version: 1.1
W:\Migration
2010013\Working/Succession planning/Succession Plan Article
W:\Migration\2010013\Working/Succession planning/Succession Plan Article▯-39612 j26@yahoo.com 397-1911 or</I> j26@yahoo.com</P> <P>\x0A<TABLE
W:\Migration
2010013\Working/Succession planning/Succession Plan Article
W:\Migration\2010013\Working/Succession planning/Succession Plan Article▯-45963 jaime.brown@gmail.com <a href="mailto:jaime.brown@gmail.com?subject=Ask The
首先要清除一些问题:我知道文件夹名称不是最好的,但是我是档案管理员,因此无论是否出现目录和文件,我们都必须使用它们。另外,列出的电子邮件只是一个示例,而不是任何人的实际电子邮件。
通过这种方式,我试图从文件路径的末尾剥离'Article▯-#####'。
在命令提示符中打印时,▯更改为ô?? o,因此现在显示为“ô?? o-#####”。因此,正则表达式中的'ô?? o'。 我的代码如下:
with open("email.txt", 'r', encoding = 'cp1252') as file:
all_lines = file.readlines()
no_header = all_lines[5:]
print (no_header) #for testing
pattern = re.compile('/(ô[?]{2}o[-][0-9]*)')
for i in range(len(no_header)):
test = re.search(pattern, no_header[i])
print (test)
由于正则表达式在RegExr中工作,所以我希望为每行返回一个与模式匹配的字符串。相反,搜索不会为每一行返回任何内容。我也尝试过使用其Unicode ID U + 25AF搜索矩形字符。那也不起作用。
似乎翻译中有些东西丢失了。我曾经使用过Python 2.7,所以我猜想这里缺少有关编码/解码的内容。
感谢您的帮助!我们这样做是为了使我们的元数据写入过程自动化,并保护个人的私人电子邮件地址。
答案 0 :(得分:0)
警告,您有一个/
,它是Ruby中的正则表达式分隔符,而在Python中不是。
此外,您可以简单地使用\S+
来匹配任何non-whitespace character:
\ S 匹配任何非空白字符;相当于类[^ \ t \ n \ r \ f \ v]。
这是一个例子:
email = """# BANNER FILE NOT PROVIDED (-b option)
# BULK_EXTRACTOR-Version: 1.5.5 ($Rev: 10844 $)
# Feature-Recorder: email
# Filename: W:\Migration\2010013\Working
# Feature-File-Version: 1.1
W:\Migration
2010013\Working/Succession planning/Succession Plan Article
W:\Migration\2010013\Working/Succession planning/Succession Plan Article▯-39612 j26@yahoo.com 397-1911 or</I> j26@yahoo.com</P> <P>\x0A<TABLE
W:\Migration
2010013\Working/Succession planning/Succession Plan Article
W:\Migration\2010013\Working/Succession planning/Succession Plan Article▯-45963 jaime.brown@gmail.com <a href="mailto:jaime.brown@gmail.com?subject=Ask The"""
import re
print(re.findall('Article\S+', email))
# ['Article▯-39612', 'Article▯-45963']
print(re.findall('Article\S\-\d+', email))
# ['Article▯-39612', 'Article▯-45963']