正規表現に実際に何か問題があるか、少なくとも式が予期しない方法で動作するようになります(私にとって)。
式は次のように分解できます。
([a-zA-Z]+\\()| (?# matches alphabetical characters and an opening round-bracket)
((<.*?>)| (?# non-greedily matches anything between brackets)
([a-zA-Z]*))| (?# 3rd pattern: may match an empty string)
(\\))? (?# 4th pattern: optionally matches a closing round bracket)
演算子は決して貪欲ではないため、|
実際に必要な4番目のパターンの前に3番目のパターンがトリガーされます(空の文字列と一致します)。
これの証拠は、正規表現で実際に取得するトークンが次のとおりであることです。
''
''
''
'Action('
'<entity>'
'<entity>'
'<Asset>'
''
''
したがって、必要なのはおそらく次のようなものです。
([a-zA-Z]+\\()| (?# matches alphabetical characters and an opening round-bracket)
(<.*?>)| (?# non-greedily matches anything between brackets)
(\\)) (?# matches a closing round bracket)
?
角かっこの外側に奇妙に配置され、空の文字列もキャプチャした4番目のパターンから演算子を削除したことに注意してください。