正则表达式 - 替换非 unicode 字符,但仅限于某些模式



我正在使用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='[^']+'

相关内容

  • 没有找到相关文章

最新更新