我希望正则表达式只在$$符号之间找到一个单词。它必须以$符号开头和结尾。我试过下面的表达
final String regex = "\\$\\w+\\$";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher("$abc$ cde$efg$hij pqr");
这应该给我数为1.但是我的正则表达式也考虑了第二次出现(cde $ efg $ hij)它不应该考虑因为它不是以$$开头和结尾。
答案 0 :(得分:2)
您可以使用非字边界:
final String regex = "\\B\\$\\w+\\$\\B";
如果$abc$
之前没有单词字符,则该模式将匹配。请参阅regex demo。
请参阅Java demo:
String regex = "\\B\\$\\w+\\$\\B";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("$abc$ cde$efg$hij pqr");
while (matcher.find()){
System.out.println(matcher.group(0));
} // => $abc$
除了非字边界外,如果你只想在空白字符或字符串的开头/结尾之间进行匹配,你可以使用空白边界:
String regex = "(?<!\\S)\\$\\w+\\$(?!\\S)";
或者,使用明确的单词边界(我称之为):
String regex = "(?<!\\w)\\$\\w+\\$(?!\\w)";
如果在当前位置的左侧立即找到单词char,则(?<!\\w)
负向后看将使匹配失败,如果立即找到单词char,则(?!\w)
否定前瞻将使匹配失败在当前位置的右侧。
答案 1 :(得分:1)
问题是为我提取美元符号之间的字段。
priceEth.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ArrayList<String> newar = new ArrayList<>();
newar = ethPrice;
//Collections.sort(ethPrice);
LineGraphSeries<DataPoint> ser = new LineGraphSeries<>(dats());
ethPrice = newar;
graph.addSeries(ser);
}
});
private DataPoint[] dats() {
int n = ethPrice.size();
DataPoint[] values = new DataPoint[n];
for(int i = 0; i<n;i++){
DataPoint v = new DataPoint(Double.parseDouble(ethPrice.get(i)), i);
values[i]=v;
}
return values;
}
这将返回美元符号之间的单词列表。