我正在使用Django,尝试为一大堆链接自动生成模板,其中一些链接具有非Unicode字符(例如é
、ç
等(。虽然当我在自己的计算机上浏览时,将这些字符放在文件名中似乎有效,但 django 不喜欢它并拒绝渲染它们。我认为一个快速的解决方案是用下划线或其他东西替换这些字符,但仅限于 Django 否则会有问题的 url 中。
我尝试解析的字符串 - 自动生成的模板 - 看起来像这样:
desc = """...blah blah blah <a href="{% url 'myproject:do_thing' arg_name='ñôt-unìcodé' %}">Link Text Ñôt Unìcodé</a> blah blah blah ..."""
所以我想使用正则表达式将ñôt-unìcodé
更改为__t-un_cod_
,同时保持Ñôt Unìcodé
不变。这是我尝试过的:
re.findall(r"'arg_name='(([^'])+?)'", desc)
我打算给我一个所有单个字符的可解析列表,然后可以通过re.sub
单独替换:
['ñ', 'ô', 't', '-', 'u', 'n', 'ì', 'c', 'o', 'd', 'é', ...]
但相反,我最终得到整个字符串和最后一个字母:
[('ñôt-unìcodé', 'é'), ...]
我在这里误解了什么?
(我已经在不同的语言的stackoverflow上分别找到了这个问题的两个部分,但不是同时 - 不过,我很难组合这些答案。
您正在将+
添加到捕获组:([^'])+
捕获组"不能"重复。如果是,您将只在捕获组上获得最后一次出现。
所以这里[('ñôt-unìcodé', 'é'), ...]
,首先是整场比赛。最后一个是捕获组(最后一个字母(。
尝试使用代替arg_name='([^']+)'
甚至arg_name='[^']+'