답변:
예를 들어
(?<=This is)(.*)(?=sentence)
나는 lookbehind를 사용 하고 "This is"와 "sentence"가 매치에 포함되지 않도록 (?<=)
앞을 내다 (?=)
보지만, 이것은 유스 케이스에 달려 있습니다 This is(.*)sentence
. 간단히 쓸 수도 있습니다 .
여기서 중요한 것은 정규식 엔진의 "dotall"모드를 활성화 .
하여 줄 바꿈과 일치하는 것입니다. 그러나이 작업을 수행하는 방법은 정규식 엔진에 따라 다릅니다.
다음은 또는를 사용하는 .*
경우 .*?
입니다. 첫 번째는 탐욕스럽고 문자열의 마지막 "문장"까지 일치하고 두 번째 것은 게으 르며 문자열의 다음 "문장"까지 일치합니다.
최신 정보
This is(?s)(.*)sentence
(? s)가 dotall 수정자를 켜면 .
개행 문자 와 일치합니다.
업데이트 2 :
(?<=is \()(.*?)(?=\s*\))
"이것은 (단순한) 문장"과 일치합니다. Regexr 에서 여기를 참조하십시오
This is(?s)(.*)sentence
작동합니까?
허용 된 답변의 정규 표현식이 나에게 맞지 않기 때문에이 질문을 부활시킵니다. 왜? 때문에
(?<=This is)(.*)(?=sentence)
일치 my first sentence. This is my second
에This is my first sentence. This is my second sentence.
두 둘러보기 사이에 지연 수량 화기가 필요합니다. ?
별표를 추가 하면 별이 게으르게됩니다.
이것은 당신이 원하는 것과 일치합니다 :
(?<=This is).*?(?=sentence)
데모를 참조하십시오 . 필요하지 않은 캡처 그룹을 제거했습니다.
줄 바꿈에 걸쳐 일치하는 DOTALL 모드
데모에서는 "dot matches line breaks mode"(일명) dot-all이 설정됩니다 ( 다양한 언어로 DOTALL을 켜는 방법 참조 ). 많은 정규 표현식에서 온라인 수정 자로 설정 (?s)
하여 표현식을 다음 과 같이 설정할 수 있습니다 .
(?s)(?<=This is).*?(?=sentence)
참고
.*
와는 .*?
도 내 대답 ( "업데이트"이전 단락)에 설명되어 있습니다. 그래서 나는 내 대답이 틀렸다고 생각하지 않습니다.
is incorrect
했다 doesn't seem quite correct to me
... 희망은 당신을 혼란 스럽게하지 않을 것입니다. 아마도 그러한 트래픽이 많은 대답의 정규식이 무엇인지에 대한 인식의 차이 일뿐입니다.
시도 This is[\s\S]*sentence
, 자바 스크립트에서 작동
[\s\S]*?
(또한 욕심없는 와일드 카드라고도 함)
이:
This is (.*?) sentence
자바 스크립트에서 작동합니다.
누군가 Jenkins 컨텍스트 내에서 이에 대한 예를 찾고있는 경우. build.log를 구문 분석하고 일치하는 것을 찾으면 일치하는 빌드에 실패합니다.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
node{
stage("parse"){
def file = readFile 'build.log'
def regex = ~"(?s)(firstStringToUse(.*)secondStringToUse)"
Matcher match = regex.matcher(file)
match.find() {
capturedText = match.group(1)
error(capturedText)
}
}
}
숭고한 텍스트로, 당신은 단순히 예를 들어 당신의 경우에 유지하고자하는 두 단어를 씁니다.
"이것은"과 "문장"
그리고 당신은 사이에. *를 씁니다.
즉 This is .* sentence
그리고 이것은 당신을 잘해야합니다
내가 한 방법은 다음과 같습니다.
이것은 필요한 특정 정규 표현식을 알아내는 것보다 쉬웠습니다.
int indexPictureData = result.IndexOf("-PictureData:");
int indexIdentity = result.IndexOf("-Identity:");
string returnValue = result.Remove(indexPictureData + 13);
returnValue = returnValue + " [bytecoderemoved] " + result.Remove(0, indexIdentity); `
Python3의 print ( "string")을 사용하여 오래된 스크립트에서 Python2의 인쇄 "문자열"사이 에서이 인쇄 구문을 변환하기 위해 정규 표현식을 검색했습니다. 잘 작동합니다. 그렇지 않으면 추가 변환에 2to3.py를 사용하십시오. 다른 사람들을위한 나의 해결책은 다음과 같습니다.
Regexr.com에서 사용해보십시오 (어떤 이유로 NP ++에서는 작동하지 않음).
find: (?<=print)( ')(.*)(')
replace: ('$2')
변수의 경우 :
(?<=print)( )(.*)(\n)
('$2')\n
라벨 및 변수의 경우 :
(?<=print)( ')(.*)(',)(.*)(\n)
('$2',$4)\n
Python2의 모든 인쇄 "문자열"을 Python3의 print ( "string")로 바꾸는 방법은 무엇입니까?
Java 접근 방식을 사용하여 두 문자열 사이의 모든 것을 일치시키는 RegEx.
List<String> results = new ArrayList<>(); //For storing results
String example = "Code will save the world";
RegEx (. ?) * 를 사용하기 위해 Pattern 및 Matcher 객체를 사용합시다 .
Pattern p = Pattern.compile("Code "(.*?)" world"); //java.util.regex.Pattern;
Matcher m = p.matcher(example); //java.util.regex.Matcher;
Matcher는 둘 이상의 일치 항목을 포함 할 수 있으므로 결과를 반복하여 저장해야합니다.
while(m.find()){ //Loop through all matches
results.add(m.group()); //Get value and store in collection.
}
이 예제에는 "저장할 것" 이라는 단어 만 포함 되지만 더 큰 텍스트에서는 더 많은 일치 항목을 찾을 수 있습니다.