0

我正在尝试使用扫描仪从“p.addPoint(x,y);”形式的字符串中读取代码行

我追求的正则表达式格式是:

*anything*.addPoint(*spaces or nothing*或者,*spaces or nothing*

到目前为止我尝试过的方法不起作用:[[.]+\\.addPoint(&&[\\s]*[,[\\s]*]]

任何想法我做错了什么?

4

2 回答 2

2

我在 Python 中对此进行了测试,但正则表达式应该可以转移到 Java:

>>> regex = '(\w+\.addPoint\(\s*|\s*,\s*|\s*\)\s*)'
>>> re.split(regex, 'poly.addPoint(3, 7)')
['', 'poly.addPoint(', '3', ', ', '7', ')', '']

您的正则表达式似乎严重畸形。即使不是这样,.在字符串开头匹配无限多次重复的通配符也可能会导致大量文本匹配实际上不相关/不想要。

编辑:误解了原始规范,当前的正则表达式应该是正确的。

于 2012-06-04T00:23:15.130 回答
0

其他方式:

public class MyPattern {

    private static final Pattern ADD_POINT;
    static {
        String varName = "[\\p{Alnum}_]++";
        String argVal = "([\\p{Alnum}_\\p{Space}]++)";
        String regex = "(" + varName + ")\\.addPoint\\(" + 
                argVal + "," + 
                argVal + "\\);";
        ADD_POINT = Pattern.compile(regex);
        System.out.println("The Pattern is: " + ADD_POINT.pattern());
    }

    public void findIt(String filename) throws FileNotFoundException {
        Scanner s = new Scanner(new FileReader(filename));

        while (s.findWithinHorizon(ADD_POINT, 0) != null) {
            final MatchResult m = s.match();
            System.out.println(m.group(0));
            System.out.println("   arg1=" + m.group(2).trim());
            System.out.println("   arg2=" + m.group(3).trim());
        }
    }

    public static void main(String[] args) throws FileNotFoundException {
        MyPattern p = new MyPattern();
        final String fname = "addPoint.txt";
        p.findIt(fname);
    }

}
于 2012-06-04T02:04:34.720 回答