새 문자열을 구성하기 위해 정규 표현식 (그룹 포함)이있는 문자열 매개 변수 목록을 사용하는 방법이 있습니까?
-
06-07-2019 - |
문제
예를 들어 다음과 같은 정규 표현이 있다고 가정 해 봅시다.
"The quick (red|brown|blue|yellow) fox (jumps|leaps) over the lazy (dog|cat)."
이 REGEX에는 3 개의 그룹화 된 구성 요소가 있습니다. 주어진 문자열과 일치하면 Regex API를 사용하면 각 그룹 내부의 값을 쉽게 추출 할 수 있습니다.
이제 3 개의 문자열이 있다고 가정 해 봅시다.
["red", "leaps","cat"]
우리가 그룹 내부에 있지 않은 Regex의 모든 캐릭터가 문자 그대로의 텍스트 문자 일 뿐이라는 가정을한다면, 그 다음 3 개의 문자열을 원래 Regex의 해당 그룹에 삽입하여 출력 문자열이 있습니다. 동정형의 비 그룹화 된 부분을 결합합니까? 이 경우 "빠른 붉은 여우가 게으른 고양이를 뛰어 넘습니다." 바람직하게는 이미 정규식과 일치하는 문자열이 필요하지 않습니다.
나는 Java에서 이것을 찾고자한다 - 나는 java.util.regex가 이것을 지원하지 않는다고 확신하지만, 나는 이것을 할 수있는 타사 lib가있을 것이라고 생각했다. 누구든지 나에게 몇 가지 포인터를 줄 수 있습니까?
해결책
중첩 된 캡처 그룹없이 할 수있는 한 리터럴을 검색하기 위해 더 많은 리그를 사용하면 다음을 수행 할 수 있습니다.
String[] strings = new String[] { "red", "leaps", "dog" };
String[] literals = new String("The quick (red|brown|blue|yellow) fox " +
"(jumps|leaps) over the lazy (dog|cat).").split("(?=[^\\\\])\\(.*?\\)");
StringBuilder sb = new StringBuilder(literals[0]);
for(int i = 0; i < strings.length; i++) {
sb.append(strings[i]);
sb.append(literals[i + 1]);
}
// => sb.toString();
다른 팁
대부분의 REGEX 구현은 검색에서 이와 같은 작업을 수행하고 대체 할 수 있습니다.
s/The quick (red|brown|blue|yellow) fox (jumps|leaps) over the lazy (dog|cat)/The quick $1 fox $2 over the lazy $3/
제휴하지 않습니다 StackOverflow