Hướng dẫn python regex match any character including newline - python regex khớp với bất kỳ ký tự nào kể cả dòng mới

87

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi muốn sử dụng re.MULTILINE nhưng không phải re.DOTALL, để tôi có thể có một regex bao gồm cả ký tự đại diện "bất kỳ ký tự" nào và ký tự đại diện . bình thường không phù hợp với newlines.NOT re.DOTALL, so that I can have a regex that includes both an "any character" wildcard and the normal . wildcard that doesn't match newlines.

Có cách nào để làm việc này không? Tôi nên sử dụng gì để phù hợp với bất kỳ nhân vật nào trong những trường hợp mà tôi muốn bao gồm các dòng mới?

Đã hỏi ngày 23 tháng 10 năm 2015 lúc 22:13Oct 23, 2015 at 22:13

Jason Sjason sJason S

181K161 Huy hiệu vàng586 Huy hiệu bạc946 Huy hiệu Đồng161 gold badges586 silver badges946 bronze badges

5

Để phù hợp với một dòng mới hoặc "bất kỳ biểu tượng nào" mà không có ____ 10/________ 8, bạn có thể sử dụng bất kỳ điều nào sau đây:

  1. import re
    text = """abc
    123
    def
    356
    more text..."""
    print[ re.findall[r"^123[?s:.*?]^3.*", text, re.M] ]
    # => ['123\ndef\n356']
    print[ re.findall[r"^123[\w\W]*?^3.*", text, re.M] ]
    # => ['123\ndef\n356']
    
    2 - Nhóm sửa đổi nội tuyến có cờ
    import re
    text = """abc
    123
    def
    356
    more text..."""
    print[ re.findall[r"^123[?s:.*?]^3.*", text, re.M] ]
    # => ['123\ndef\n356']
    print[ re.findall[r"^123[\w\W]*?^3.*", text, re.M] ]
    # => ['123\ndef\n356']
    
    3 trên SETS một phạm vi trong đó tất cả các mẫu . đều khớp với bất kỳ char nào bao gồm cả chars line break

  2. Bất kỳ công việc nào sau đây:

[\s\S]
[\w\W]
[\d\D]

Ý tưởng chính là các lớp tốc ký đối diện bên trong một lớp ký tự phù hợp với bất kỳ biểu tượng nào có trong chuỗi đầu vào.

So sánh nó với

import re
text = """abc
123
def
356
more text..."""
print[ re.findall[r"^123[?s:.*?]^3.*", text, re.M] ]
# => ['123\ndef\n356']
print[ re.findall[r"^123[\w\W]*?^3.*", text, re.M] ]
# => ['123\ndef\n356']
5 và các biến thể khác với sự xen kẽ, giải pháp lớp ký tự hiệu quả hơn nhiều vì nó liên quan đến việc quay lại ít hơn nhiều [khi được sử dụng với bộ định lượng
import re
text = """abc
123
def
356
more text..."""
print[ re.findall[r"^123[?s:.*?]^3.*", text, re.M] ]
# => ['123\ndef\n356']
print[ re.findall[r"^123[\w\W]*?^3.*", text, re.M] ]
# => ['123\ndef\n356']
6 hoặc
import re
text = """abc
123
def
356
more text..."""
print[ re.findall[r"^123[?s:.*?]^3.*", text, re.M] ]
# => ['123\ndef\n356']
print[ re.findall[r"^123[\w\W]*?^3.*", text, re.M] ]
# => ['123\ndef\n356']
7]. So sánh ví dụ nhỏ: Phải mất
import re
text = """abc
123
def
356
more text..."""
print[ re.findall[r"^123[?s:.*?]^3.*", text, re.M] ]
# => ['123\ndef\n356']
print[ re.findall[r"^123[\w\W]*?^3.*", text, re.M] ]
# => ['123\ndef\n356']
8 45 bước để hoàn thành và phải mất
import re
text = """abc
123
def
356
more text..."""
print[ re.findall[r"^123[?s:.*?]^3.*", text, re.M] ]
# => ['123\ndef\n356']
print[ re.findall[r"^123[\w\W]*?^3.*", text, re.M] ]
# => ['123\ndef\n356']
9 chỉ 2 bước.

Xem bản demo Python nơi tôi đang khớp một dòng bắt đầu với

[\S\n\t\v ]
0 và cho đến lần xuất hiện đầu tiên của
[\S\n\t\v ]
1 khi bắt đầu một dòng và bao gồm cả phần còn lại của dòng đó:

import re
text = """abc
123
def
356
more text..."""
print[ re.findall[r"^123[?s:.*?]^3.*", text, re.M] ]
# => ['123\ndef\n356']
print[ re.findall[r"^123[\w\W]*?^3.*", text, re.M] ]
# => ['123\ndef\n356']

Đã trả lời ngày 23 tháng 10 năm 2015 lúc 22:16Oct 23, 2015 at 22:16

Wiktor Stribiżewwiktor StribiżewWiktor Stribiżew

581K34 Huy hiệu vàng400 Huy hiệu bạc503 Huy hiệu Đồng34 gold badges400 silver badges503 bronze badges

4

Khớp với bất kỳ ký tự nào [bao gồm cả dòng mới]:

Biểu thức chính quy: [Lưu ý việc sử dụng không gian '' cũng ở đó]

[\S\n\t\v ]

Example:

import re

text = 'abc def ###A quick brown fox.\nIt jumps over the lazy dog### ghi jkl'
# We want to extract "A quick brown fox.\nIt jumps over the lazy dog"
matches = re.findall['###[\S\n ]+###', text]
print[matches[0]]

'Trận đấu [0]' sẽ chứa: 'Một con cáo màu nâu nhanh. \ Nit nhảy qua con chó lười biếng'
'A quick brown fox.\nIt jumps over the lazy dog'

Mô tả về '\ s' Python Docs:

[\S\n\t\v ]
2 khớp với bất kỳ ký tự nào không phải là ký tự khoảng trắng.

[Xem: //docs.python.org/3/l LI

Đã trả lời ngày 13 tháng 7 năm 2020 lúc 15:54Jul 13, 2020 at 15:54

Ali Sajjadali SajjadAli Sajjad

2.53922 Huy hiệu bạc33 Huy hiệu đồng22 silver badges33 bronze badges

2

2.4. & Nbsp; phù hợp với bất kỳ ký tự nào

Vấn đề

Kết hợp một nhân vật được trích dẫn. Cung cấp một giải pháp cho phép bất kỳ ký tự đơn, ngoại trừ một đường ngắt, giữa các trích dẫn. Cung cấp một cái khác thực sự cho phép bất kỳ nhân vật, bao gồm cả việc phá vỡ dòng.

Dung dịch

Bất kỳ nhân vật nào ngoại trừ dòng phá vỡ dòng

'.'
Các tùy chọn regex: Không có [không phải là tùy chọn của DOT DOT phù hợp với dòng phá vỡ dòng] None [the “dot matches line breaks” option must not be set]
Hương vị Regex: .NET, Java, JavaScript, PCRE, Perl, Python, Ruby .NET, Java, JavaScript, PCRE, Perl, Python, Ruby

Bất kỳ nhân vật nào bao gồm cả phá vỡ dòng

'.'
Các tùy chọn regex: Không có [không phải là tùy chọn của DOT DOT phù hợp với dòng phá vỡ dòng] Dot matches line breaks
Hương vị Regex: .NET, Java, JavaScript, PCRE, Perl, Python, Ruby .NET, Java, PCRE, Perl, Python, Ruby
Bất kỳ nhân vật nào bao gồm cả phá vỡ dòng
Tùy chọn Regex: DOT khớp với các dòng phá vỡ dòng None
Hương vị Regex: .NET, Java, JavaScript, PCRE, Perl, Python, Ruby .NET, Java, PCRE, Perl, Python, Ruby

Bất kỳ nhân vật nào bao gồm cả phá vỡ dòng

Bất kỳ nhân vật nào ngoại trừ dòng phá vỡ dòng

'.'

Các tùy chọn regex: Không có [không phải là tùy chọn của DOT DOT phù hợp với dòng phá vỡ dòng]

Hương vị Regex: .NET, Java, JavaScript, PCRE, Perl, Python, Ruby

Regex có bao gồm Newline không?

Theo mặc định trong hầu hết các động cơ Regex,. Không phù hợp với các ký tự mới, vì vậy các điểm dừng phù hợp ở cuối mỗi dòng logic.Nếu bạn muốn .Để phù hợp với tất cả mọi thứ, bao gồm cả Newlines, bạn cần bật chế độ DOT-matches-tất cả các chế độ trong động cơ Regex của bạn [ví dụ: thêm RE. doesn't match newline characters, so the matching stops at the end of each logical line. If you want . to match really everything, including newlines, you need to enable “dot-matches-all” mode in your regex engine of choice [for example, add re.

Làm thế nào để bạn phù hợp với một ký tự dòng mới trong regex?

"\ n" phù hợp với một ký tự dòng mới. matches a newline character.

\ R và \ n trong regex là gì?

Regex nhận ra các trình tự thoát phổ biến như \ n cho Newline, \ t cho tab, \ r để quay lại vận chuyển, \ nnn cho số octal lên tới 3 chữ số, \ xhh cho mã hex hai chữ số, \ uhhhh cho mộtUnicode 4 chữ số, \ uhhhhhhhhh cho một unicode 8 chữ số.\n for newline, \t for tab, \r for carriage-return, \nnn for a up to 3-digit octal number, \xhh for a two-digit hex code, \uhhhh for a 4-digit Unicode, \uhhhhhhhh for a 8-digit Unicode.

Làm thế nào để bạn phù hợp với một dòng mới trong Python?

Để phù hợp với regex dòng mới trong Python, hãy sử dụng mẫu \ n.Trên OS Linux, đó là \ n;Trên Windows, đường ngắt phù hợp với \ r \ n và trong phiên bản cũ của Mac, đó là \ r.use the pattern \n. On Linux OS, it is \n; on Windows, the line break matches with \r\n, and in the old version of Mac, it is \r.

Bài Viết Liên Quan

Chủ Đề