정규식을 사용하여 하위 문자열을 추출하는 방법
두 개의 작은 따옴표가있는 문자열이 있습니다 '. 작은 따옴표 사이에는 내가 원하는 데이터가 있습니다.
다음 텍스트에서 "원하는 데이터"를 추출하기 위해 정규식을 작성하려면 어떻게해야합니까?
mydata = "some string with 'the data i want' inside";
작은 따옴표 사이에 부분을 원한다고 가정하면이 정규 표현식을 다음과 함께 사용하십시오 Matcher.
"'(.*?)'"
예:
String mydata = "some string with 'the data i want' inside";
Pattern pattern = Pattern.compile("'(.*?)'");
Matcher matcher = pattern.matcher(mydata);
if (matcher.find())
{
System.out.println(matcher.group(1));
}
결과:
내가 원하는 데이터
이를 위해 정규식이 필요하지 않습니다.
프로젝트에 Apache Commons lang을 추가 한 후 ( http://commons.apache.org/proper/commons-lang/ ) 다음을 사용하십시오.
String dataYouWant = StringUtils.substringBetween(mydata, "'");
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
Pattern pattern = Pattern.compile(".*'([^']*)'.*");
String mydata = "some string with 'the data i want' inside";
Matcher matcher = pattern.matcher(mydata);
if(matcher.matches()) {
System.out.println(matcher.group(1));
}
}
}
여러 인용 된 문자열을 쉽게 처리하는 정규 표현식이없는 솔루션 인 Scala를 선택했기 때문에 :
val text = "some string with 'the data i want' inside 'and even more data'"
text.split("'").zipWithIndex.filter(_._2 % 2 != 0).map(_._1)
res: Array[java.lang.String] = Array(the data i want, and even more data)
이것에 대한 간단한 하나의 라이너가 있습니다.
String target = myData.replaceAll("[^']*(?:'(.*?)')?.*", "$1");
일치하는 그룹을 선택적으로 만들면이 경우 공백을 반환하여 찾을 수없는 따옴표도 제공합니다.
라이브 데모를 참조하십시오 .
자바 스크립트에서와 같이 :
mydata.match(/'([^']+)'/)[1]
실제 정규 표현식은 다음과 같습니다. /'([^']+)'/
욕심없는 수정자를 사용하면 (다른 게시물에 따라) 다음과 같습니다.
mydata.match(/'(.*?)'/)[1]
더 깨끗합니다.
String dataIWant = mydata.replaceFirst(".*'(.*?)'.*", "$1");
스칼라에서
val ticks = "'([^']*)'".r
ticks findFirstIn mydata match {
case Some(ticks(inside)) => println(inside)
case _ => println("nothing")
}
for (ticks(inside) <- ticks findAllIn mydata) println(inside) // multiple matches
val Some(ticks(inside)) = ticks findFirstIn mydata // may throw exception
val ticks = ".*'([^']*)'.*".r
val ticks(inside) = mydata // safe, shorter, only gets the first set of ticks
String dataIWant = mydata.split("'")[1];
라이브 데모 보기
Apache Commons Lang은 java.lang API를위한 다양한 도우미 유틸리티, 특히 문자열 조작 방법을 제공합니다. 귀하의 경우 시작 부분 문자열과 끝 부분 문자열이 동일하므로 다음 함수를 호출하십시오.
StringUtils.substringBetween(String str, String tag)동일한 String의 두 인스턴스 사이에 중첩 된 String을 가져옵니다 .
시작 부분 문자열과 끝 부분 문자열이 다른 경우 다음 오버로드 된 메소드를 사용하십시오.
StringUtils.substringBetween(String str, String open, String close)두 문자열 사이에 중첩 된 문자열을 가져옵니다.
일치하는 부분 문자열의 모든 인스턴스를 원하면
StringUtils.substringsBetween(String str, String open, String close)시작 및 종료 태그로 구분 된 하위 문자열을 문자열에서 검색하여 배열에서 일치하는 모든 하위 문자열을 반환합니다 .
문제의 예는 일치하는 부분 문자열의 모든 인스턴스를 가져옵니다.
String[] results = StringUtils.substringsBetween(mydata, "'", "'");
참고 URL : https://stackoverflow.com/questions/4662215/how-to-extract-a-substring-using-regex
'development' 카테고리의 다른 글
| git을 사용하여 최신 개정판 가져 오기 (0) | 2020.03.02 |
|---|---|
| django OneToOneField와 ForeignKey의 차이점은 무엇입니까? (0) | 2020.03.02 |
| 자동 커밋없이 Git 병합 (0) | 2020.03.02 |
| REST API 모범 사례 : 매개 변수를 어디에 둘 것인가? (0) | 2020.03.01 |
| alias 또는 alias_method를 사용해야합니까? (0) | 2020.03.01 |