2012-06-04 27 views
0

我试图使用扫描仪从以下形式的字符串中的代码行来读取解析代码值“p.addPoint(X,Y);”扫描仪 - 使用正则表达式定界符

正则表达式格式我后:

*anything*.addPoint(*spaces or nothing* OR ,*spaces or nothing*

什么我试过到目前为止不工作:[[.]+\\.addPoint(&&[\\s]*[,[\\s]*]]

任何想法我做错了吗?

+1

'[...]'定义了一个字符类,而你至今什么是完全破碎。研究括号在正则表达式中的含义并重试。 –

+0

我对_spaces或nothing_感到困惑。只有空格,没有别的?你不想捕捉数值吗? – Litty

+0

这是分隔符正则表达式,基本上是作为整数之间的分隔符传递的。 –

回答

2

我在Python测试这一点,但正则表达式应该转移到Java:

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

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

编辑:误解了原来的规格,目前正则表达式应该是正确的。

+0

似乎并不奏效...... 我的输入为“poly.addPoint(3, 7); //#5“注意,它应该同时接收3和7 –

+0

你得到了什么输出,你需要什么输出?更具体地说,你是否试图在匹配吗?你们是不是要组的数值参数,并提取它们?更多详情,请。 –

+0

使用正则表达式作为分隔符扫描仪,我想用一段时间(hasNextInt()),并抓住两个3和7使用nextInt整数();两次这样说你 我没有收到来自您的正则表达式的任何输出 –

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); 
    } 

}