두 개의 작은 따옴표가있는 문자열이 있습니다 '
. 작은 따옴표 사이에는 내가 원하는 데이터가 있습니다.
다음 텍스트에서 “원하는 데이터”를 추출하기 위해 정규식을 작성하려면 어떻게해야합니까?
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]
더 깨끗합니다.