2012-06-04 7 views
0

Я пытаюсь использовать сканер для чтения в строках кода из строки формы «p.addPoint (x, y);»Сканер - значения кода парсинга с использованием разделителя regex

Регулярное выражение формат я после:

*anything*.addPoint(*spaces or nothing* ИЛИ ,*spaces or nothing*

То, что я пытался до сих пор не работает: [[.]+\\.addPoint(&&[\\s]*[,[\\s]*]]

Любые идеи, что я делаю неправильно?

+1

'[...] 'определяет класс символов, а также то, что вы до сих пор полностью нарушена. Изучите значение скобок в регулярном выражении и повторите попытку. –

+0

Я запутался в _spaces или ничего. Только пробелы и ничего больше? Вы не пытаетесь поймать числовые значения? – 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

Используя регулярное выражение как разделитель сканера, я пытаюсь использовать while (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); 
    } 

} 
Смежные вопросы