2015-11-24 3 views
1

У меня есть эти две строкиRegex найти все символы до и после первого подчеркивания, то убедитесь, что они такие же

2014_UMW 
2014_UMW_web 

мне нужно написать регулярное выражение, чтобы получить символ до и после того, как кулак подчеркивания. Тогда мне нужно убедиться, что они одинаковые. Я проверяю, что 2014_UMW находится в начале обеих строк. 2014_UMW - только один пример. Это может быть 2015_YYY и 2015_YYY_web т.д.

этого является регулярным выражением, которое я использую (?<=_)[^_]+(?=_), а затем я использую шаблоны и Сличитель методу, чтобы увидеть, если они оба то же самые, но он не работает правильно. Я также пробовал это регулярное выражение [a-zA-Z_0-9]+[^_]+(?=_).

+0

См. [This demo] (http://ideone.com/d90mU2) - это то, что вы ищете? Регулярное выражение ['(_.). * +'] (Https://regex101.com/r/fG6eW6/1), которое соответствует тому, что вам не нужно сравнивать, поэтому в replaceAll его можно удалить, и сравниваются начало строк. –

+0

Вы хотите сравнить всю строку перед первым подчеркиванием? – SarathChandra

+0

В каталоге 2014_UMW.fer, 2014_UMW.itm и 2014_UMW_web.xml есть три файла. Мне нужно убедиться, что все три файла связаны с 2014_UMW, но поскольку у этого одного файла есть дополнительный _web после его затруднения. Другой пример: 2015_UMWXYZ.fer 2015_UMWXYZ.itm и 2015_UMWXYZ_web.xml. Мне нужно регулярное выражение, чтобы получить начальную часть каждого файла, т.е. 2014_UMW или 2015_UMWXYZ в этих двух случаях, поэтому я могу сделать все три файла связанными с одним и тем же набором данных –

ответ

0

Чтобы получить часть после первой _ вы можете использовать это регулярное выражение:.

Pattern p = Pattern.compile("^[^_]+_([^_]+)"); 

и получить захваченную группу # 1, используя matcher.group(1) для части заинтересованной в вы как раз

RegEx Demo

0

Образец, который вы говорите, вы используете, (?<=_)[^_]+(?=_), соответствует непустой последовательности символов, отличных от '_', которая ограничена с каждой стороны знаком подчеркивания. Это не похоже на ваше намерение «получить персонажа до и после [первого] ​​подчеркивания».

В вашем примере, думаю, что вы хотите сделать, это разделить строки на символы подчеркивания и сравнить первые два сегмента каждого. В этом случае вы можете использовать String.split(). Детали могут варьироваться в зависимости от того, как именно вы хотите, чтобы охарактеризовать расщепление, но вот один, простой, как это может пойти:

String[] parts1 = string1.split("_"); 
String[] parts2 = string2.split("_"); 
// compare elements of parts1 and parts2 

В качестве альтернативы, если вы хотите использовать регулярное выражение для захвата первых два сегмента такая строка, то вы хотите Pattern вдоль этих линий:

Pattern p = Pattern.compile("^([^_]+)_([^_]+)(?:_.*)?"); 

(Эта форма подходит для использования с любым из Matcher.matches(), Matcher.find() или Matcher.lookingAt(), более простые формы возможны, если вы хотите, чтобы поддерживать один или оба из последние два.) Опять же, детали требуемого шаблона могут варьироваться в зависимости от того, что вы после этого.

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