使用代码我(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'),
答案 0 :(得分:2)
使用正则表达式实现此目的的方法有很多种,其中之一是:
In [23]: re.sub(r"'([^']+)'", r"'\1a'", "(r' ', ' '),", 1)
Out[23]: "(r' a', ' '),"
我不是一个好老师,而且regexps很难理解,我仍然会试着把它分解给你:
'
将匹配字符串主题中的'
(
打开论坛\1
,在此)
之间找到的任何内容都将在论坛\1
中,[^']
匹配除'
,+
表示可以重复前一个字符类([^']
),'
将与'
'
以补偿1中的替换'
,\1
组中匹配的内容,从2.到4.,所有非'
个字符,'
以补偿模式regexp中的最后'
,随意尝试,删除count参数和类似的东西。但是你会 在某个时候学习regexp,所以你应该把它看作是阅读the holy manual的好机会。知道正则表达式将使你成为一个更好的程序员,并让你掌控文本数据。