Python 正则表达式找不到特定的十六进制字符对
python 3.7.4 我有一个*.csv,其中包含许多字符串实例Python 正则表达式找不到特定的十六进制字符对,python,python-3.x,regex,Python,Python 3.x,Regex,python 3.7.4 我有一个*.csv,其中包含许多字符串实例 High School 以及许多十六进制对的实例 C3 82 我想把它拿走 def findem( fn, patt): p = re.compile(patt) with open( fn, newline = '\n') as fp: for line in fp.readlines(): m = p.search( line) if( m): print('fo
High School
以及许多十六进制对的实例
C3 82
我想把它拿走
def findem( fn, patt):
p = re.compile(patt)
with open( fn, newline = '\n') as fp:
for line in fp.readlines():
m = p.search( line)
if( m):
print('found {0}'.format(line))
fn_inn = "Contacts_prod.csv"
patt_hs = "High School"
patt_C382 = r'\\xC3\\x82'
print('trying patt_hs')
findem( fn_inn, patt_hs) # <------- finds all rows containing High School, great
print('trying patt_C382')
findem( fn_inn, patt_C382) # <------- doesnt find anything and should
def findem(fn,patt):
p=重新编译(patt)
以open(fn,换行符=“\n”)作为fp:
对于fp.readlines()中的行:
m=p.搜索(行)
如果(m):
打印('找到{0}'。格式(行))
fn_inn=“Contacts\u prod.csv”
patt_hs=“高中”
patt_C382=r'\\xC3\\x82'
打印('trying patt_hs')
findem(fn_inn,patt_hs)#诀窍是1)放弃寻找和显示每个事件的思维,记住目标是删除所有事件,2)用二进制思维。然后它变得简单,但有一些微妙之处:
def findem( patt):
p = re.compile(patt)
with open( fn_out, 'wb') as fp_out: #binary input
with open( fn_inn, 'rb') as fp_inn: #binary output
slurp_i = fp_inn.read() # slurp_i is of type bytes
slurp_o = p.sub( b'', slurp_i) # notice the b'' , very subtle
fp_out.write( slurp_o)
fn_inn = "Contacts_prod.csv"
fn_out = "Contacts_prod.fixed.dat"
patt = re.compile(b'\xC3\x82') # notice the b'' instead of r'', very subtle
findem( patt)
感谢所有的回应。万岁
仍在学习Steve如果这些十六进制实体是文字,请尝试patt=r“\\xc3\\x82”
。另外,您可以与十六进制字符共享确切的内容部分吗?请尝试使用re.sub
ro将以下正则表达式的匹配项替换为空字符串:r'(?在我之前的评论之后,这里有一个指向.Warrior的链接,我认为您提到“十六进制对”时混淆了问题。毕竟,它们只是字符串。我相信如果你只是说你想用空字符串替换高中
和\xC3\x82
字符串会更清楚。为清晰起见,重构代码。更改为r'\\xC3\\x82'没有帮助。到目前为止,我认为如果你自己解决了问题,你可以将自己的答案标记为答案。