Python 更改捕获组中的文本

Python 更改捕获组中的文本,python,regex,django,Python,Regex,Django,对于我正在使用的代码,更改为a(r'a',a'a'),当它应该更改为(r'a',''),。什么是更自然的方法?如何使用re.sub 当前代码,请参阅 示例: Expression: \s*(?:url)?\(r?["|'](?P<pattern>[^'"]+)["|'],\s*["|']?direct_to_template["|']?,\s*{["|']template["|']:\s*["|'](?P<template>[^'"]+)["|']}\), String:

对于我正在使用的代码,更改为
a(r'a',a'a'),
当它应该更改为
(r'a',''),
。什么是更自然的方法?如何使用
re.sub

当前代码,请参阅

示例:

Expression: \s*(?:url)?\(r?["|'](?P<pattern>[^'"]+)["|'],\s*["|']?direct_to_template["|']?,\s*{["|']template["|']:\s*["|'](?P<template>[^'"]+)["|']}\),
String:     (r'^$', direct_to_template, {'template': 'home.html'}),
Dictionary: {u'pattern': u'^$abc', u'type': u'direct to template', u'template': u'home.html'}
Output:     (r'^$abc', direct_to_template, {'template': 'home.html'}),

Expression: \s*(?:url)?\(r?["|'](?P<pattern>[^'"]+)["|'],\s*["|']?(?P<view>[^'"]+)["|']?\),
String:     (r'^urls/', 'urls.views.urls'),
Dictionary: {u'pattern': u'^new_urls_pattern/', u'type': u'view', u'view': u'urls.views.urls'}
Output:     (r'^new_urls_patterns/', 'urls.views.urls'),

================= Incorrect Output ========================

Expression: \s*(?:url)?\(r?["|'](?P<pattern>[^'"]+)["|'],\s*["|']?(?P<view>[^'"]+)["|']?\),
String:     (r'^urls/', 'urls'),
Dictionary: {u'pattern': u'^new_urls_pattern/', u'type': u'view', u'view': u'urlsxyz'}
Incorrect Output:     (r'^urlsxyz/', 'urlsxyz'),
Correct Output:     (r'^urls/', 'urlsxyz'),
表达式:\s*(?:url)?\(r?[“|”](?P[^'”+)[“|”],\s*[“|”]?直接指向_模板[“|”],\s*{“|”]模板[“|”]:\s*[“|”](?P[^'+)[“|”],”,
字符串:(r'^$',直接指向模板,{'template':'home.html'}),
字典:{u'pattern':u'^$abc',u'type':u'direct to template',u'template':u'home.html'}
输出:(r'^$abc',直接指向模板,{'template':'home.html'}),
表达式:\s*(?:url)?\(r?[“|”](?P[^'”+)[“|”],\s*[“|”]?(?P[^'”+)[“|”]?\),
字符串:(r“^URL/”,“url.views.url”),
字典:{u'pattern':u'^new\u url\u pattern/',u'type':u'view',u'view':u'url.views.url'}
输出:(r“^new”url“patterns/,“url.views.url”),
======================输出不正确========================
表达式:\s*(?:url)?\(r?[“|”](?P[^'”+)[“|”],\s*[“|”]?(?P[^'”+)[“|”]?\),
字符串:(r“^URL/”,“URL”),
字典:{u'pattern':u'^new\u url\u pattern/',u'type':u'view',u'view':u'urlsxyz'}
输出不正确:(r“^urlsxyz/”,“urlsxyz”),
正确的输出:(r“^URL/”,“urlsxyz”),

使用regexp有很多方法可以实现这一点,这里有一种:

In [23]: re.sub(r"'([^']+)'", r"'\1a'", "(r' ', ' '),", 1)
Out[23]: "(r' a', ' '),"
我不是一个好老师,regexp很难理解,但我会尝试向你们解释:

  • 使用,使用参数:
    • 第一个参数是regexp
    • 第二个是替换regexp
    • 第三个是主题,你想用的字符串
    • finnaly是应用替换的次数
  • 使用第一个regexp:
  • 将匹配字符串主题中的
  • 打开组
    \1
    ,在此和
    之间找到的任何内容)
    将在组
    \1
  • [^']
    匹配除
    '
    之外的任何字符
  • +
    表示可以重复上一个字符类(
    [^']
  • 将匹配
  • 替换的regexp表示:
    • '
      放在1中以补偿替换的
      '
    • 将匹配的内容放入组
      \1
      ,从2开始。至4.,所有非
      字符
    • 放置
      以补偿模式regexp中的最后一个

请随意尝试一下,去掉count参数之类的东西。但在某个时候,您将有机会学习regexp,因此您应该将其视为阅读的绝佳机会。了解regexp将使您成为一名更好的程序员,并使您能够处理文本数据。

我发现您的问题没有明确说明。您只给出了一个替换示例,但您的代码循环了整个替换列表。请向我们提供更多的输入/输出对,或者更全面地描述您试图实现的目标。对不起,谁来阅读?您希望我们帮助您解决您的问题,因此请努力将问题归结为相关问题,同时提供足够的示例,让我们真正掌握您想要完成的任务。而且,我仍然对期望的效果感到困惑。你能用文字描述一下你想要的替代品吗,或者再举一个例子?增加了例子和截图
In [23]: re.sub(r"'([^']+)'", r"'\1a'", "(r' ', ' '),", 1)
Out[23]: "(r' a', ' '),"