5

この質問では区切り文字間の文字列をキャプチャするための正規表現が提供されています。

テスト: This is a test string [more or less]

正規表現: (?<=\[)(.*?)(?=\])

戻り値: more or less

キャプチャされる文字列に区切り文字も含まれている場合はどうなりますか?

テスト1: This is a test string [more [or] less]

リターン1: more [or] less

テスト2: This is a test string [more [or [and] or] less]

リターン2: more [or [and] or] less

そして複数の括弧?

テスト3: This is a test string [more [or [and] or] less] and [less [or [and] or] more]

リターン3 more [or [and] or] less:、less [or [and] or] more

どの正規表現がこれを行いますか?または、どの小さなruby / pythonスクリプトがこれを実行できますか?

4

1 に答える 1

7

JavaScriptで

var str = 'This is a test string [more [or [and] or] less]';    
str = str.match( /\[(.+)\]/ )[1];
// "more [or [and] or] less"

を省略すると?.+最後まで貪欲に一致し]ます。

Pythonで

str = "This is a test string [more [or [and] or] less]"
re.search( "(?<=\[).+(?=\])", str ).group()
// "more [or [and] or] less"

複数のネストされたブラケットの更新

JavaScriptで

var matches = [],
    str = 'This is a test string [more [or [and] or] less] and [less [or [and] or] more] and [more]';

str.replace( /\[([^\]]*\[?[^\]]*\]?[^[]*)\]/g, function ( $0, $1 ) {
    $1 && matches.push( $1 );
});

console.log( matches );
// [ "more [or [and] or] less", "less [or [and] or] more", "more" ]

Pythonで

import re
str = 'This is a test string [more [or [and] or] less] and [less [or [and] or] more] and [more]'

matches = re.findall( r'\[([^\]]*\[?[^\]]*\]?[^[]*)\]', str )

print matches
# [ 'more [or [and] or] less', 'less [or [and] or] more', 'more' ]
于 2013-02-22T19:05:44.577 に答える