Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式找不到特定的十六进制字符对_Python_Python 3.x_Regex - Fatal编程技术网

Python 正则表达式找不到特定的十六进制字符对

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

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('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'没有帮助。到目前为止,我认为如果你自己解决了问题,你可以将自己的答案标记为答案。