注意:发布之前,我已经搜索过CSV正则表达式。到目前为止,我在csv中找到的最好的正则表达式可以在答案here中找到。
我想创建一个用于处理csv的自定义路径转换器,例如像这样:
register_converter(CSVConverter, 'csv')
urlpatterns = [
...
path('csv/<csv:list_of_values>/', views.csv_view, name='csv_view'),
...
]
其中list_of_values
的每个值都是一个字符串,不需要 用引号引起来,例如
http://localhost:8000/csv/value1,value2,value3/
我尝试了以下操作:
class CSVConverter:
# see https://stackoverflow.com/a/48806378/5623899
regex = "(?:,|\n|^)(\"(?:(?:\"\")*[^\"]*)*\"|[^\",\n]*|(?:\n|$))"
def to_python(self, value):
return value.split(',')
def to_url(self, value):
return ','.join(value)
但这不起作用...
答案 0 :(得分:2)
除非我缺少任何内容,否则您不需要复杂的正则表达式。您只需要捕获不包含斜杠(from lxml import html
from lxml import etree
import requests
page = requests.get('http://www.freejobalert.com/upsc-advt-no-17/31908/')
tree = html.fromstring(page.content)
tables = tree.xpath('//table')
file = open("output.html","wb")
for t in tables:
print(etree.tostring(t))
file.write(etree.tostring(t))
)的任何字符串,拆分就由/
处理。您可以简单地使用内置StringConverter
中的正则表达式:
to_python()
或者,您也可以继承class CSVConverter:
regex = '[^/]+'
def to_python(self, value):
return value.split(',')
def to_url(self, value):
return ','.join(value)
的子类:
StringConverter