1

Python を使用して、文字列のすべての docblock を検索したいと考えています。私の最初の試みはこれでした:

b = re.compile('\/\*(.)*?\*/', re.M|re.S)
match = b.search(string)
print(match.group(0))

そして、それはうまくいきましたが、お気づきのように、すべてではなく、1 つの docblock のみが出力されます。

だから私は次のようにすべての一致を出力すると言うfindall関数を使いたかった:

b = re.compile('\/\*(.)*?\*/', re.M|re.S)
match = b.findall(string)
print(match)

しかし、これらの種類の配列だけで、有用なものは何も得られません:

[' ', ' ', ' ', '\t', ' ', ' ', ' ', ' ', ' ', '\t', ' ', ' ', ' ']

ドキュメントには、空の文字列を返すと書かれていますが、これがどのように役立つかはわかりません。

4

2 に答える 2

3

修飾子をキャプチャ グループ内に移動する必要があります。

b = re.compile('\/\*(.*?)\*/', re.M|re.S)
于 2013-06-29T17:06:28.783 に答える
2

Rohit Jainの(正しい)答えを少し拡張するには、括弧の外側に修飾子を付けて、 「括弧内の1文字の任意の数に(貪欲に)一致させ、その1文字をキャプチャします」と言っています。つまり、" " または "aaaaaa" に一致しますが、"abcde" では "a" のみに一致します。(そして、貪欲ではないので、"aaaaaa" であっても、単一の "a" にしか一致しません)。修飾子を括弧内に移動することで (つまり、以前の修飾子の(.*?)代わりに)、「任意の数の文字に一致し、それらすべてをキャプチャする」と言っています。

これが、何が起こっているのかを少しよく理解するのに役立つことを願っています。

于 2013-06-29T17:23:18.020 に答える