Ví dụ: "Đây chỉ là \ na câu đơn giản".
Tôi muốn khớp mọi ký tự giữa "Đây là" và "câu". Ngắt dòng nên được bỏ qua. Tôi không thể tìm ra cú pháp chính xác.
Ví dụ: "Đây chỉ là \ na câu đơn giản".
Tôi muốn khớp mọi ký tự giữa "Đây là" và "câu". Ngắt dòng nên được bỏ qua. Tôi không thể tìm ra cú pháp chính xác.
Câu trả lời:
Ví dụ
(?<=This is)(.*)(?=sentence)
Tôi đã sử dụng lookbehind (?<=)
và nhìn về phía trước (?=)
để "Đây là" và "câu" không được bao gồm trong trận đấu, nhưng điều này tùy thuộc vào trường hợp sử dụng của bạn, bạn cũng có thể chỉ cần viết This is(.*)sentence
.
Điều quan trọng ở đây là bạn kích hoạt chế độ "dotall" của công cụ regex của mình, sao cho .
phù hợp với dòng mới. Nhưng làm thế nào bạn làm điều này phụ thuộc vào công cụ regex của bạn.
Điều tiếp theo là nếu bạn sử dụng .*
hoặc .*?
. Câu đầu tiên là tham lam và sẽ khớp với "câu" cuối cùng trong chuỗi của bạn, câu thứ hai là lười biếng và sẽ khớp với "câu" tiếp theo trong chuỗi của bạn.
Cập nhật
This is(?s)(.*)sentence
Trong đó (?) Bật công cụ sửa đổi dotall, làm cho .
khớp các ký tự dòng mới.
Cập nhật 2:
(?<=is \()(.*?)(?=\s*\))
phù hợp với ví dụ của bạn "Đây là (một câu) đơn giản". Xem ở đây trên Regexr
This is(?s)(.*)sentence
sẽ làm việc không?
Làm sống lại câu hỏi này bởi vì regex trong câu trả lời được chấp nhận dường như không hoàn toàn chính xác với tôi. Tại sao? Bởi vì
(?<=This is)(.*)(?=sentence)
sẽ phù hợp my first sentence. This is my second
trongThis is my first sentence. This is my second sentence.
Bạn cần một bộ định lượng lười biếng giữa hai cái nhìn. Thêm một ?
ngôi sao làm cho lười biếng.
Điều này phù hợp với những gì bạn muốn:
(?<=This is).*?(?=sentence)
Xem bản demo . Tôi loại bỏ nhóm chụp, không cần thiết.
Chế độ DOTALL để phù hợp với các lần ngắt dòng
Lưu ý rằng trong bản demo, "dot khớp với chế độ ngắt dòng" (hay còn gọi là dot-all được đặt (xem cách bật DOTALL bằng nhiều ngôn ngữ khác nhau ). Trong nhiều hương vị regex, bạn có thể đặt nó với công cụ sửa đổi trực tuyến (?s)
, biến biểu thức thành:
(?s)(?<=This is).*?(?=sentence)
Tài liệu tham khảo
.*
và .*?
cũng được giải thích trong câu trả lời của tôi (đoạn trước "Cập nhật"). Vì vậy, tôi không nghĩ rằng câu trả lời của tôi là không chính xác.
is incorrect
để doesn't seem quite correct to me
... Hy vọng điều đó không làm bạn co giật, có lẽ chỉ là một sự khác biệt về nhận thức về những gì các regex cho một câu trả lời có lưu lượng cao như vậy nên được.
Hãy thử This is[\s\S]*sentence
, hoạt động trong javascript
[\s\S]*?
(còn được gọi là: ký tự đại diện không tham lam)
dùng cái này: (?<=beginningstringname)(.*\n?)(?=endstringname)
endstringname
Trong trường hợp bất cứ ai đang tìm kiếm một ví dụ về điều này trong bối cảnh Jenkins. Nó phân tích cú pháp build.log và nếu tìm thấy kết quả khớp, nó sẽ thất bại trong quá trình xây dựng với kết quả khớp.
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)
}
}
}
Bạn chỉ có thể sử dụng này: \This is .*? \sentence
Trong văn bản cao siêu, bạn chỉ cần viết hai từ bạn quan tâm để giữ ví dụ trong trường hợp của bạn, đó là
"Đây là" và "câu"
và bạn viết. * ở giữa
I E This is .* sentence
và điều này sẽ làm bạn tốt
Đây là cách tôi đã làm:
Điều này đối với tôi dễ dàng hơn là cố gắng tìm ra regex cụ thể cần thiết.
int indexPictureData = result.IndexOf("-PictureData:");
int indexIdentity = result.IndexOf("-Identity:");
string returnValue = result.Remove(indexPictureData + 13);
returnValue = returnValue + " [bytecoderemoved] " + result.Remove(0, indexIdentity); `
Tôi đã tìm đến regex ở đây để chuyển đổi cú pháp in này giữa bản in "chuỗi", trong Python2 trong các tập lệnh cũ với: print ("chuỗi"), cho Python3. Hoạt động tốt, nếu không, hãy sử dụng 2to3.py để chuyển đổi bổ sung. Đây là giải pháp của tôi cho người khác:
Dùng thử trên Regexr.com (không hoạt động trong NP ++ vì một số lý do):
find: (?<=print)( ')(.*)(')
replace: ('$2')
cho các biến:
(?<=print)( )(.*)(\n)
('$2')\n
cho nhãn và biến:
(?<=print)( ')(.*)(',)(.*)(\n)
('$2',$4)\n
Làm cách nào để thay thế tất cả "chuỗi" in trong Python2 bằng print ("chuỗi") cho Python3?
Điều này làm việc cho tôi (Tôi đang sử dụng Mã VS ):
cho:
This is just\na simple sentence
Sử dụng:
This .+ sentence
RegEx để khớp mọi thứ giữa hai chuỗi bằng cách sử dụng phương pháp Java.
List<String> results = new ArrayList<>(); //For storing results
String example = "Code will save the world";
Chúng ta hãy sử dụng các đối tượng Pattern và Matcher để sử dụng RegEx (. ?) * .
Pattern p = Pattern.compile("Code "(.*?)" world"); //java.util.regex.Pattern;
Matcher m = p.matcher(example); //java.util.regex.Matcher;
Vì Matcher có thể chứa nhiều hơn một trận đấu, chúng tôi cần lặp lại kết quả và lưu trữ nó.
while(m.find()){ //Loop through all matches
results.add(m.group()); //Get value and store in collection.
}
Ví dụ này sẽ chỉ chứa từ "sẽ lưu" từ, nhưng trong văn bản lớn hơn có thể sẽ tìm thấy nhiều kết quả khớp hơn.