-1

私が使用しているコードでは、いつ変更する必要があるかを変更し(r' ', ' '),ます。これを行うより自然な方法は何ですか?でこれを行うにはどうすればよいですか?a a a a(r' a', a' a'),(r' a', ' '),re.sub

現在のコードは、こちらを参照してください

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

ジャンゴギのスクリーンショット

4

1 に答える 1

2

正規表現でこれを達成する方法はたくさんあります。

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

私は良い教師ではなく、正規表現を理解するのは難しいですが、それでもあなたにこれを分解しようとします:

  • re.subを使用して、使用される引数:
    • 最初の引数は正規表現です。
    • 2 番目は置換正規表現です。
    • 3 番目は件名、処理する文字列、
    • 最後は交換を適用する回数です。
  • 最初の正規表現を使用する:
    1. ''文字列の件名の a に一致し、
    2. (group を開き\1、これとの間に見つかったものはすべて)group\1に含まれます。
    3. [^'],を除く'任意の文字に一致
    4. +前の文字クラス ( [^']) を繰り返すことができることを意味し、
    5. '一致します'
  • 置換正規表現は次のように述べています。
    • 1.で'交換したものを補うために入れます。'
    • 一致したものは何でも group \1、2. から 4. までのすべて、すべての非'文字、
    • パターン正規表現に'ある最後のものを補うために置きます。'

自由に試してみてください。count 引数などを削除してください。しかし、ある時点で正規表現を学ばなければならないので、それを神聖なマニュアルを読む絶好の機会と見なすべきです。regexp を知っていると、より優れたプログラマーになり、テキスト データを操作できるようになります。

于 2012-10-31T18:54:31.997 に答える