2014-11-06 2 views
0

Я использую эту строку кода для извлечения всего текста между двумя строками «Происхождение» и «//». Я пытаюсь исключить все цифры, но это не работает, он захватывает все, включая цифры. неправильно ли мое регулярное выражение?Регулярное выражение, не отделяющее цифры

Pattern p = Pattern.compile(Pattern.quote("ORIGIN") + "(.*?[^0-9])" + Pattern.quote("//"), Pattern.DOTALL); 
+0

пример будет лучше. –

+0

Ваше регулярное выражение явно не делает то, что предлагает ваше объяснение; можете ли вы хотя бы понять, почему? (подсказка: нет квантификатора на '[^ 0-9]') – fge

+0

да, я пробовал [^ 0-9] +, и это тоже не сработало. Я так потерялся! –

ответ

0

Прежде всего: у вас нет необходимости в Pattern.quote() либо из ORIGIN или //; Более того, текст в вашем вопросе предлагает Origin, а не ORIGIN, поэтому я пойду с этим.

Попробуйте это регулярное выражение:

private static final Pattern PATTERN 
    = Pattern.compile("Origin([^0-9/]+)//"); 

Примечание: она запрещает любую косую черту между Origin и // а также, что может или не может быть то, что вы хотите; но поскольку в вашем вопросе нет примеров, это так же хорошо, как я могу собрать.

0

Что вы хотите, неясно.
1) Если вы хотите получить только текст (без какого-либо числа), даже если есть число в:

Pattern p = Pattern.compile("ORIGIN(.*)//"); 
Matcher m = p.matcher(str); 
if(m.find()) 
    System.out.println(m.group(1).replaceAll("\\d+", "")); 

2) Если вы хотите, чтобы получить текст без номера:

Pattern p = Pattern.compile("ORIGIN([^0-9]+)//"); 
Matcher m = p.matcher(str); 
if(m.find()) 
    ystem.out.println(m.group(1));  

3) Что-то другое ???????

например:

Строка: ORIGINbla54bla//

1) Строка: блабла
2) Нет результата (шаблон не соответствует)

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