【问题标题】:Changing text in a captured group更改捕获组中的文本
【发布时间】:2012-10-28 17:24:51
【问题描述】:

当我使用的代码(r' ', ' '), 更改为a a a a(r' a', a' a'), 时,它应该更改为(r' a', ' '),。有什么更自然的方法来做到这一点?如何使用re.sub 执行此操作?

当前代码,见here

for key, value in newgroupdict.items():
    try:
        newstr = newstr.replace(re.search(e, line).group(key), value)
    except:
        pass

例子:

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'),

【问题讨论】:

  • 我发现你的问题很不明确。您只给出了一个替换示例,但您的代码会遍历整个替换列表。请向我们提供更多输入/输出对或更全面地描述您要完成的工作。
  • 抱歉,谁来读这个?您希望我们帮助您解决问题,因此请努力将问题归结为相关的内容,同时仍然提供足够的示例让我们真正掌握您想要完成的任务。
  • Are You A Movie Director Or Something? 另外,我仍然对预期的效果感到困惑。你能用文字描述一下你想要的替换,或者再举一个例子吗?
  • 添加示例和截图

标签: python regex django


【解决方案1】:

使用正则表达式有很多方法可以实现这一点,这里有一个:

In [23]: re.sub(r"'([^']+)'", r"'\1a'", "(r' ', ' '),", 1)
Out[23]: "(r' a', ' '),"

我不是一个好老师,正则表达式很难理解,但我还是会试着把它分解给你:

  • 使用re.sub,使用的参数:
    • 第一个参数是正则表达式,
    • 第二个是替换正则表达式,
    • 第三个是主题,你要工作的字符串,
    • finnaly 是应用替换的次数,
  • 使用第一个正则表达式:
    1. ' 将匹配您的字符串主题中的 '
    2. ( 打开群组\1,在此和) 之间找到的任何内容都将在群组\1 中,
    3. [^'] 匹配任何字符除了'
    4. + 表示上一个字符类([^'])可以重复,
    5. ' 将匹配 '
  • 替换正则表达式说:
    • 输入' 以补偿1.中替换的'
    • 将匹配的内容放入\1 组中,从 2. 到 4. 的所有内容,所有非 ' 字符,
    • 输入' 以补偿模式正则表达式中的最后一个'

随意尝试它,删除 count 参数和类似的东西。但是您将必须在某个时候学习正则表达式,因此您应该将其视为阅读the holy manual 的绝佳机会。了解正则表达式将使您成为更好的程序员,并赋予您对文本数据的权力。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    相关资源
    最近更新 更多