これは最も効率的ではないかもしれませんが、うまくいくでしょう...
\$([^\s]*)(?:[A-Z]\d)|\$([^\s]*)
最初のセットは国会議事堂の後に数字が続くものをすべて見つけ、2番目のセットは接尾辞のないものをすべて見つけるので、うまくいきます...
あなたが望むものであるキャプチャグループから一致を取得する場合。
このようなものはうまくいくと思います...
import java.io.Console;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class HereYouGo {
public static void main (String args[]) {
String input = "$mytestA1 --> expected output: mytest\r\n$againD4 --> expected output: again\r\n$something --> expected output: something\r\n$name3 --> expected output: name3 // because there was no capital letter before the number digit\r\n$name2P4 --> expected output: name2\r\n";
Pattern myPattern = Pattern.compile("\\$([^ ]*)(?:[A-Z]\\d)|\\$([^ ]*)", Pattern.DOTALL | Pattern.MULTILINE);
Matcher myMatcher = myPattern.matcher(input);
while(myMatcher.find())
{
String group1 = myMatcher.group(1);
String group2 = myMatcher.group(2);
//note: this should probably be changed in the case neither match is found
System.out.println( group1!=null? group1 : group2 );
}
}
}
これにより、次のように出力されます
mytest
again
something
name3
name2