[java] 정규식을 사용하여 하위 문자열을 추출하는 방법

두 개의 작은 따옴표가있는 문자열이 있습니다 '. 작은 따옴표 사이에는 내가 원하는 데이터가 있습니다.

다음 텍스트에서 “원하는 데이터”를 추출하기 위해 정규식을 작성하려면 어떻게해야합니까?

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));
        }

    }
}


답변

이것에 대한 간단한 하나의 라이너가 있습니다.

String target = myData.replaceAll("[^']*(?:'(.*?)')?.*", "$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 dataIWant = mydata.replaceFirst(".*'(.*?)'.*", "$1");


답변

자바 스크립트에서와 같이 :

mydata.match(/'([^']+)'/)[1]

실제 정규 표현식은 다음과 같습니다. /'([^']+)'/

욕심없는 수정자를 사용하면 (다른 게시물에 따라) 다음과 같습니다.

mydata.match(/'(.*?)'/)[1]

더 깨끗합니다.