Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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
带有特殊字符的字符串don';不能使用Python和正则表达式_Python_Regex - Fatal编程技术网

带有特殊字符的字符串don';不能使用Python和正则表达式

带有特殊字符的字符串don';不能使用Python和正则表达式,python,regex,Python,Regex,我在这个项目中工作,特别的角色让我发疯!我在foruns周围寻找了很多解决方案,但他们没有解决我的问题 我有一个带有特殊字符的字符串: ['{"response":{"startRow":0,"endRow":5,"totalRows":5,"data": [{"CODIGO":"72","DESCRICAO":"RECEITA INTRA-ORÇÁMENTÁRIAS DE CONTRIBUÇÕES","PREVISTA":225847716.0,"REALIZADA":165311075.

我在这个项目中工作,特别的角色让我发疯!我在foruns周围寻找了很多解决方案,但他们没有解决我的问题

我有一个带有特殊字符的字符串:

['{"response":{"startRow":0,"endRow":5,"totalRows":5,"data":   [{"CODIGO":"72","DESCRICAO":"RECEITA INTRA-ORÇÁMENTÁRIAS DE CONTRIBUÇÕES","PREVISTA":225847716.0,"REALIZADA":165311075.58,"DIFERENCA":60536640.42,"R___":1.0},{"CODIGO":"76","DESCRICAO":"RECEITA  INTRA-ORÇAMENTÁRIAS DE SERVIÇOS","PREVISTA":22367493.0,"REALIZADA":3435363.08,"DIFERENCA":18932129.92,"R___":2.0},{"CODIGO":"77","DESCRICAO":"TRANSFERÊNCIAS  INTRA-ORÇAMENTÁRIAS CORRENTES","PREVISTA":1218252.0,"REALIZADA":0.0,"DIFERENCA":1218252.0,"R___":3.0},{"CODIGO":"71","DESCRICAO":"RECEITA TRIBUTÁRIA INTRA-ORÇAMENTÁRIA","PREVISTA":12000.0,"REALIZADA":0.0,"DIFERENCA":12000.0,"R___":4.0},{"CODIGO":"79","DESCRICAO":"OUTRAS RECEITAS INTRA-ORÇAMENTÁRIAS CORRENTES","PREVISTA":0.0,"REALIZADA":311785.30,"DIFERENCA":-311785.30,"R___":5.0}]}}']
我必须找到一些使用正则表达式的特殊字符串,但我必须保留特殊字符

我试过一些东西:

nkfd_form = unicodedata.normalize('NFKD', unicode(html))
print u"".join([c for c in nkfd_form if not unicodedata.combining(c)])

print ' '.join(re.findall(r'(?:\w{3,}|-(?=\s))', html))
print ' '.join(''.join([i if ord(i) < 128 else ' ' for i in html]).split())
特殊字符不正确。结果是这样的:

[':0', ':2', ':2', ':"94"', ':"DEDU', ':0.0', ':-2748373.25', ':2748373.25', ':1.0', ':"95"', ':"DEDU', ':-1421484000.0', ':-1062829156.22', ':-358654843.78', ':2.0']
[':0', ':5', ':5', ':"72"', ':"RECEITA INTRA-OR', ':225847716.0', ':165311075.58', ':60536640.42', ':1.0', ':"76"', ':"RECEITA  INTRA-OR', ':22367493.0', ':3435363.08', ':18932129.92', ':2.0', ':"77"', ':"TRANSFER', ':1218252.0', ':0.0', ':1218252.0', ':3.0', ':"71"', ':"RECEITA TRIBUT', ':12000.0', ':0.0', ':12000.0', ':4.0', ':"79"', ':"OUTRAS RECEITAS INTRA-OR', ':0.0', ':311785.30', ':-311785.30', ':5.0']
print ' '.join(re.findall(ur'(?:\w{3,}|-(?=\s))', html))
72,RECEITA INTRA-ORÇÁMENTÁRIAS DE CONTRIBUÇÕES,225847716.0,165311075.58,60536640.42,1.0
76,RECEITA  INTRA-ORÇAMENTÁRIAS DE SERVIÇOS,22367493.0,3435363.08,18932129.92,2.0
77,TRANSFERÊNCIAS  INTRA-ORÇAMENTÁRIAS CORRENTES,1218252.0,0.0,1218252.0,3.0
71,RECEITA TRIBUTÁRIA INTRA-ORÇAMENTÁRIA,12000.0,0.0,12000.0,4.0
79,OUTRAS RECEITAS INTRA-ORÇAMENTÁRIAS CORRENTES,0.0,311785.3,-311785.3,5.0
它忽略了特殊字符

我需要它,因为我将在CSV文件中写入数据,它不会处理此错误

使用提示符的简单测试:

>>> import re
>>> re.findall('\w+', 'Márquez', re.U)
['M\xc3', 'rquez']

我要怎么做才能解决这个问题?

您的输入似乎是unicode,但正则表达式不是

尝试将您的正则表达式模式更改为unicode,如下所示:

[':0', ':2', ':2', ':"94"', ':"DEDU', ':0.0', ':-2748373.25', ':2748373.25', ':1.0', ':"95"', ':"DEDU', ':-1421484000.0', ':-1062829156.22', ':-358654843.78', ':2.0']
[':0', ':5', ':5', ':"72"', ':"RECEITA INTRA-OR', ':225847716.0', ':165311075.58', ':60536640.42', ':1.0', ':"76"', ':"RECEITA  INTRA-OR', ':22367493.0', ':3435363.08', ':18932129.92', ':2.0', ':"77"', ':"TRANSFER', ':1218252.0', ':0.0', ':1218252.0', ':3.0', ':"71"', ':"RECEITA TRIBUT', ':12000.0', ':0.0', ':12000.0', ':4.0', ':"79"', ':"OUTRAS RECEITAS INTRA-OR', ':0.0', ':311785.30', ':-311785.30', ':5.0']
print ' '.join(re.findall(ur'(?:\w{3,}|-(?=\s))', html))
72,RECEITA INTRA-ORÇÁMENTÁRIAS DE CONTRIBUÇÕES,225847716.0,165311075.58,60536640.42,1.0
76,RECEITA  INTRA-ORÇAMENTÁRIAS DE SERVIÇOS,22367493.0,3435363.08,18932129.92,2.0
77,TRANSFERÊNCIAS  INTRA-ORÇAMENTÁRIAS CORRENTES,1218252.0,0.0,1218252.0,3.0
71,RECEITA TRIBUTÁRIA INTRA-ORÇAMENTÁRIA,12000.0,0.0,12000.0,4.0
79,OUTRAS RECEITAS INTRA-ORÇAMENTÁRIAS CORRENTES,0.0,311785.3,-311785.3,5.0
参考:


您的输入似乎是unicode,但正则表达式不是

尝试将您的正则表达式模式更改为unicode,如下所示:

[':0', ':2', ':2', ':"94"', ':"DEDU', ':0.0', ':-2748373.25', ':2748373.25', ':1.0', ':"95"', ':"DEDU', ':-1421484000.0', ':-1062829156.22', ':-358654843.78', ':2.0']
[':0', ':5', ':5', ':"72"', ':"RECEITA INTRA-OR', ':225847716.0', ':165311075.58', ':60536640.42', ':1.0', ':"76"', ':"RECEITA  INTRA-OR', ':22367493.0', ':3435363.08', ':18932129.92', ':2.0', ':"77"', ':"TRANSFER', ':1218252.0', ':0.0', ':1218252.0', ':3.0', ':"71"', ':"RECEITA TRIBUT', ':12000.0', ':0.0', ':12000.0', ':4.0', ':"79"', ':"OUTRAS RECEITAS INTRA-OR', ':0.0', ':311785.30', ':-311785.30', ':5.0']
print ' '.join(re.findall(ur'(?:\w{3,}|-(?=\s))', html))
72,RECEITA INTRA-ORÇÁMENTÁRIAS DE CONTRIBUÇÕES,225847716.0,165311075.58,60536640.42,1.0
76,RECEITA  INTRA-ORÇAMENTÁRIAS DE SERVIÇOS,22367493.0,3435363.08,18932129.92,2.0
77,TRANSFERÊNCIAS  INTRA-ORÇAMENTÁRIAS CORRENTES,1218252.0,0.0,1218252.0,3.0
71,RECEITA TRIBUTÁRIA INTRA-ORÇAMENTÁRIA,12000.0,0.0,12000.0,4.0
79,OUTRAS RECEITAS INTRA-ORÇAMENTÁRIAS CORRENTES,0.0,311785.3,-311785.3,5.0
参考:


将我的评论转化为答案(有点像,因为它不包含正则表达式):

然后
jsontest.csv
如下所示:

[':0', ':2', ':2', ':"94"', ':"DEDU', ':0.0', ':-2748373.25', ':2748373.25', ':1.0', ':"95"', ':"DEDU', ':-1421484000.0', ':-1062829156.22', ':-358654843.78', ':2.0']
[':0', ':5', ':5', ':"72"', ':"RECEITA INTRA-OR', ':225847716.0', ':165311075.58', ':60536640.42', ':1.0', ':"76"', ':"RECEITA  INTRA-OR', ':22367493.0', ':3435363.08', ':18932129.92', ':2.0', ':"77"', ':"TRANSFER', ':1218252.0', ':0.0', ':1218252.0', ':3.0', ':"71"', ':"RECEITA TRIBUT', ':12000.0', ':0.0', ':12000.0', ':4.0', ':"79"', ':"OUTRAS RECEITAS INTRA-OR', ':0.0', ':311785.30', ':-311785.30', ':5.0']
print ' '.join(re.findall(ur'(?:\w{3,}|-(?=\s))', html))
72,RECEITA INTRA-ORÇÁMENTÁRIAS DE CONTRIBUÇÕES,225847716.0,165311075.58,60536640.42,1.0
76,RECEITA  INTRA-ORÇAMENTÁRIAS DE SERVIÇOS,22367493.0,3435363.08,18932129.92,2.0
77,TRANSFERÊNCIAS  INTRA-ORÇAMENTÁRIAS CORRENTES,1218252.0,0.0,1218252.0,3.0
71,RECEITA TRIBUTÁRIA INTRA-ORÇAMENTÁRIA,12000.0,0.0,12000.0,4.0
79,OUTRAS RECEITAS INTRA-ORÇAMENTÁRIAS CORRENTES,0.0,311785.3,-311785.3,5.0
我使用了Python 2.6.8


顺便说一句:我从中改编了
UnicodeDictWriter
类。只需向下滚动两到三个屏幕,您就会找到原始的
UnicodeWriter
类。

将我的评论转化为答案(有点像,因为它不包含正则表达式):

然后
jsontest.csv
如下所示:

[':0', ':2', ':2', ':"94"', ':"DEDU', ':0.0', ':-2748373.25', ':2748373.25', ':1.0', ':"95"', ':"DEDU', ':-1421484000.0', ':-1062829156.22', ':-358654843.78', ':2.0']
[':0', ':5', ':5', ':"72"', ':"RECEITA INTRA-OR', ':225847716.0', ':165311075.58', ':60536640.42', ':1.0', ':"76"', ':"RECEITA  INTRA-OR', ':22367493.0', ':3435363.08', ':18932129.92', ':2.0', ':"77"', ':"TRANSFER', ':1218252.0', ':0.0', ':1218252.0', ':3.0', ':"71"', ':"RECEITA TRIBUT', ':12000.0', ':0.0', ':12000.0', ':4.0', ':"79"', ':"OUTRAS RECEITAS INTRA-OR', ':0.0', ':311785.30', ':-311785.30', ':5.0']
print ' '.join(re.findall(ur'(?:\w{3,}|-(?=\s))', html))
72,RECEITA INTRA-ORÇÁMENTÁRIAS DE CONTRIBUÇÕES,225847716.0,165311075.58,60536640.42,1.0
76,RECEITA  INTRA-ORÇAMENTÁRIAS DE SERVIÇOS,22367493.0,3435363.08,18932129.92,2.0
77,TRANSFERÊNCIAS  INTRA-ORÇAMENTÁRIAS CORRENTES,1218252.0,0.0,1218252.0,3.0
71,RECEITA TRIBUTÁRIA INTRA-ORÇAMENTÁRIA,12000.0,0.0,12000.0,4.0
79,OUTRAS RECEITAS INTRA-ORÇAMENTÁRIAS CORRENTES,0.0,311785.3,-311785.3,5.0
我使用了Python 2.6.8


顺便说一句:我从中改编了
UnicodeDictWriter
类。只需向下滚动两三个屏幕,您就会找到原始的UnicodeWriter类。

谢谢您的回答!但它仍然是错误的:结果是:
response startRow endRow totalRows data CODIGO descripo传输xc3 x8aNCIAS内部xc3 x87AMENT xc3 x81RIAS CAPITAL PREVISTA 5253000 REALIZADA diference 5253000 R\uuuuu
感谢您的回答!但它仍然是错误的:结果是:
response startRow endRow totalRows data CODIGO descripo TRANSFER xc3 x8aNCIAS INTRA xc3 x87AMENT xc3 x81RIAS CAPITAL PREVISTA 5253000 REALIZADA diference 5253000 R\uuuu
您的字符串似乎是有效的JSON代码。那么,为什么将其称为“html”(变量的名称)?你为什么不直接用这个?让我们从简单的测试开始(问题的最后一部分):不要在控制台上键入,而是创建py文件,确保它是UTF-8,然后运行它。它有用吗它应该可以工作,如果可以,那么您的控制台编码就不是unicode。同样的情况也适用于您的输入文件。顺便说一句,您使用的是什么py版本,2.x还是3.x?@pillmuncher始终记得Jamie Zawinski说过的一句名言-非常好的参考!嘿,谢谢你们!我使用了json模块,但数据是字符串格式的。当我使用json.dumps(myString)时,我得到了类似这样的结果:
[“{\”response\”:{“startRow\”:0,“endRow\”:8,“totalRows\”:8,“data\”:[{“CODIGO\”:“11\”,“descraco\”:“RECEITA TRIBUT\u00c1RIA\”,“PREVISTA\”:10811027750.0,
您的字符串似乎是有效的json代码。那么,为什么将其称为“html”(变量的名称)?为什么不使用?并始终记住。让我们从简单测试开始(问题的最后一部分):不要在控制台上键入,而是创建py文件,确保它是UTF-8,然后运行它。它有效吗?-应该有效,如果有效,那么您的控制台编码不是unicode。输入文件也是如此。顺便问一下,您使用的py版本是2.x还是3.x?@pillmuncher始终记得Jamie Zawinski的名言-非常好的参考!嘿,谢谢各位!我使用了json模块,但数据是字符串格式的。当我使用json.dumps(myString)时,我得到的结果如下:
[“{\'response\”:{\'startRow\”:0,\'endRow\:8,\'totalRows\:8,\'data\:[{\'CODIGO\”:“11\,“descico\”:“RECEITA TRIBUT u00c1RIA\,“PREVISTA\”:10811027750.0,
再次感谢您。它工作得非常好!看一看:=)再次感谢您。它工作得非常好!看一看:=)