python - 为什么这里的 sub() 函数可以只传两个参数?
PHPz
PHPz 2017-04-18 09:17:31
0
2
429

一个模版系统
这是程序:

#!/usr/bin/env python
# templates.py

import fileinput, re

# Match strings in [ ]
field_pat = re.compile(r'\[(.+?)\]')

# Collect variables
scope = {}

# for re.sub
def replacement(match):
    code = match.group(1)
    try:
        # If string can be evaluate out a value, return it.
        return str(eval(code, scope))
    except SyntaxError:
        # else exec the assignment statement in action scope.
        exec code in scope
        # ...... return empty string
        return ''

# Get all text in a string
# Also, there is another way, consider Chapter 11
lines = []
for line in fileinput.input():
    lines.append(line)
    text = ''.join(lines)

# replace all items match field pattern
print field_pat.sub(replacement, text)

另外这是 strings.txt 文件内的内容:

[x = 2]
[y = 3]
The sum of [x] and [y] is [x + y]

运行结果如下:

The sum of 2 and 3 is 5

我的疑问是:
程序的最后一行

print field_pat.sub(replacement, text)

为何只有两个参数?
根据官方对 re.sub() 的文档,re.sub() 的最少参数是3个。

官方文档

PHPz
PHPz

学习是最好的投资!

全員に返信(2)
迷茫

还是文档検索と置換:

もう 1 つの一般的なタスクは、パターンに一致するものをすべて見つけて、それらを別の文字列に置き換えることです。 sub() メソッドは、文字列または関数のいずれかの置換値と、処理される文字列を受け取ります。

リーリー

文字列内の重複しない左端の RE を置換置換によって置き換えることによって取得された文字列を返します。パターンが見つからない場合は、文字列が変更されずに返されます。

オプションの引数 count は、置換されるパターンの最大出現数です。 count は負ではない整数でなければなりません。デフォルト値の 0 は、すべての出現箇所を置き換えることを意味します。

いいねを押す +0
小葫芦

(@selfbootさんのレシピと一緒にお召し上がりください)

field_pat.sub(replacement, text)re.sub() ではありません...

はい

Python2

  • sub(repl, string, count=0)

    • コンパイルされたパターンを使用する、sub() 関数と同じです。

Python2-sub

リーリー

Python3

  • regex.sub(repl, string, count=0)

    • コンパイルされたパターンを使用する、sub() 関数と同じです。

Python3 - regex.sub

リーリー

私が回答した質問: Python-QA

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!