2

次の文字列には正規表現が必要です:

caption
"caption"
<caption>
[caption]
(caption)
etc

このコンテキストのキャプションは [a-zA-Z] です。のような同じシンボルに後方参照を使用できますが、、 、 など"のペア シンボルはどうすればよいですか?()[]<>

4

4 に答える 4

3

正規表現エンジンが条件をサポートしている場合に実行できます。

(?:(")|(<)|(\[)|(\())[A-Za-z]*(?(1)")(?(2)>)(?(3)\])(?(4)\))

@stemaまたは@Anirudhによって提案されたソリューションよりも読みやすいというわけではありません:)

説明:

(?:       # Match either...
 (")      # a quote, capture it in group 1
|         # or
 (<)      # an opening angle bracket --> group 2
|         # or
 (\[)     # an opening bracket --> group 3
|         # or
 (\()     # on opening parenthesis --> group 4
)         # End of alternation
[A-Za-z]* # Match any ASCII letters
(?(1)")   # If group 1 matched before, then match a quote
(?(2)>)   # If group 2 matched before, then match a closing angle bracket
(?(3)\])  # If group 3 matched before, then match a closing bracket
(?(4)\))  # If group 4 matched before, then match a closing parenthesis
于 2013-05-28T07:46:10.537 に答える
0

多くの | でなければできないと思います。

<[a-zA-z]+>|\[[a-zA-z]+\]|\([a-zA-z]+\)

または偽陽性が増えるリスク

[<\[\(][a-zA-z]+[>\]\)]

置換のためにこれが必要な場合、多くのプログラミング言語がコールバック関数をサポートしています

http://docs.python.org/2/library/re.html#re.sub

repl が関数の場合、重複しないパターンの出現ごとに呼び出されます。この関数は単一の一致オブジェクト引数を取り、置換文字列を返します。例えば:

于 2013-05-28T07:41:58.863 に答える