-1

我在尝试从字符串文件中删除单词时遇到问题,例如:

    String text = "data['danger.high'] && data['$safe.low'] || data['go.now']";

我想做的是从字符串中删除第一个单引号和“。”之间的所有内容。,我想要的结果如下:

    result = "data[high] && data[low] || data[now]";

这将是我需要的结果。

到目前为止我得到的是

    String text = "data['danger.high'] && data['$safe.low'] || data['go.now']";
    text = text.replaceAll("\\'(.*?)\\.", "");

但这给了我

    result = "data[highlownow']"

我究竟做错了什么?

更新

感谢您的回答,现在我的后续问题可以说我有

    String text = "data['danger.high'] && (data['$safe.low'] || data['go.now'] == 'yes')";

我想要以下结果:

    result = "data[high] && (data[low] || data[now] == 'yes')"; 

在这种情况下保持单引号为“是”。

4

3 回答 3

2

你可以这样做:

text = text.replaceAll("\\'([$a-zA-Z]+)\\.", "'").replaceAll("'", "");

text.replaceAll("\\'([$a-zA-Z]+)\\.", "'")会给你:

 data['high'] && data['low'] || data['now']

并且.replaceAll("'", "");会给你想要的结果(没有')。

data[high] && data[low] || data[now]
于 2013-04-15T11:09:36.200 回答
1

你的正则表达式应该稍微调整一下。寻找$字符和[a-zA-Z]. 我假设您想保留单引号。如果不需要,请告诉我。您也可以replaceAll()再次使用字符串来删除单引号。

        String text = "data['danger.high'] && data['$safe.low'] || data['go.now']";
        text = text.replaceAll("\\'([$a-zA-Z]+)\\.", "'");
        System.out.println(text);

输出

数据['高'] && 数据['低'] || 数据['现在']

于 2013-04-15T11:08:43.670 回答
0

您的表达式正在删除从第二个单引号开始的字符,这就是您要获得此结果的原因您应该防止 replaceAll 以 '] 开头的字符

使用 text = text.replaceAll("\'([$a-zA-Z]+)\.", "'");

于 2013-04-15T11:13:26.803 回答