Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Регулярное выражение (Поиск текста среди массива строк)


(PillowMan) #1

В ниже приведенном тексте нужно найти слово, после решетки, если между двумя решетками существует элемент ("^\s.+ = ").

Код:

 #First
 0 = "0000"
 1 = "0000"
 ...
 99 = "0000"
 #Second
 100 = "0000"
 101 = "0000"
 ...
 199 = "0000"
 #Third
 200 = "0000"
 201 = "0000"
 ...
 300 = "0000"

Решение пока у меня получилось такое, но оно не совсем корректное: (?<=[#])\w+(?=([^#]+)(173 = ))
Если я использую первую сотню, то выделяются сразу все 3 элемента. Но если воспользоваться (?<=[#])\w+(?=([^#]+)(^\s173 = )) все работает, но возникает следующая проблема описанная ниже.

P.S. я написал не зря ("^\s.+ = "), т.к. вместо цифр могут быть буквы. Прикрепляю файл.

Чтобы не плодить куча тем, сразу задам тут связующий вопрос:
Если попытаться выполнить код, то System.out.println(a); не сработает, но сработает криво как указано выше если вместо (?<=[#])\\w+(?=([^#]+)(^\\s"+i+" = )) вписать (?<=[#])\\w+(?=([^#]+)("+i+" = ))

public static void main (String[] args){	
	
	try (Scanner s = new Scanner(new BufferedReader(new FileReader ("src\\main\\resources\\DefaultValues")))){
		String i = "0";
		
		while(s.hasNext()){

			String a = s.findInLine("(?<=[#])\\w+(?=([^#]+)(^\\s"+i+" = ))");

				if(a!=null){
					System.out.println(a);
				}
				s.nextLine();	
			}		
	}
	catch(IOException ex){
		ex.printStackTrace();
	}

	
}

В чем может быть проблема?


(Ruslan Semerenko) #3

Все потому что findInLine не видит переносов строк, поэтому ^\\s не имеет смысла, ведь ^ указывает на начало строки. Достаточно просто убрать этот символ.