Hướng dẫn python re wildcard - ký tự đại diện của trăn

Đó là kịch bản:

Show

Frontend vượt qua biểu thức chính quy cho phụ trợ, sau đó phụ trợ lấy nó và thực hiện biểu thức chính quy. Nhưng tôi muốn chỉ thực hiện trận đấu đại diện.

Ví dụ: Frontend Pass bash-1.*.0, nó hoạt động tốt

Nhưng bash-1.(hello):*.0, nó sẽ không khớp với bash-1.(hello):1.0

Vì vậy, có thể chỉ phù hợp với ký tự đại diện bằng mô -đun Python Re?

Đã hỏi ngày 6 tháng 5 năm 2021 lúc 0:49May 6, 2021 at 0:49

Hướng dẫn python re wildcard - ký tự đại diện của trăn

6

Bạn đang tìm kiếm .* . là một ký tự đại diện và * là bất kỳ số nào (trong khi ? có thể so sánh bằng 0 hoặc một và + là ít nhất một)

Đã trả lời ngày 6 tháng 5 năm 2021 lúc 0:55May 6, 2021 at 0:55

ti7ti7ti7

13.8k6 Huy hiệu vàng32 Huy hiệu bạc60 Huy hiệu Đồng6 gold badges32 silver badges60 bronze badges

Bạn nên sử dụng mô-đun

string = 'bash-1.(hello):1.0'
pattern = 'bash-1\.\(hello\):.\.0'
re.match(pattern, string)
#
0 trong stdlib nếu bạn muốn khớp kiểu toàn cầu. Ví dụ:

import fnmatch
print(fnmatch.fnmatch("bash-1.(hello):1.0","bash-1.(hello):*.0")) # True
print(fnmatch.fnmatch("bash-1.(goodbye):1.0","bash-1.(hello):*.0")) # False

Đã trả lời ngày 6 tháng 5 năm 2021 lúc 1:00May 6, 2021 at 1:00

Hướng dẫn python re wildcard - ký tự đại diện của trăn

SuperstormersuperstormerSuperStormer

4.7475 Huy hiệu vàng20 Huy hiệu bạc32 Huy hiệu Đồng5 gold badges20 silver badges32 bronze badges

Trong

string = 'bash-1.(hello):1.0'
pattern = 'bash-1\.\(hello\):.\.0'
re.match(pattern, string)
#
1, . sẽ phù hợp với bất cứ điều gì ngoại trừ Kẻ hủy diệt dòng một lần, trong đó .* sẽ khớp với thời gian không giới hạn.

Trong mẫu hiện tại của bạn, bạn đang cố gắng khớp với . tuy nhiên đang quên thoát khỏi nó, nghĩa là nó sẽ phù hợp với bất cứ điều gì. Bạn nên thoát khỏi chính xác .

string = 'bash-1.(hello):1.0'
pattern = 'bash-1\.\(hello\):.\.0'
re.match(pattern, string)
#
6 sau đó bạn sẽ có thể tìm thấy một trận đấu.

string = 'bash-1.(hello):1.0'
pattern = 'bash-1\.\(hello\):.\.0'
re.match(pattern, string)
#

https://regex101.com/r/Wj3V7e/1

Đã trả lời ngày 6 tháng 5 năm 2021 lúc 0:57May 6, 2021 at 0:57

PacketLosspacketLossPacketLoss

5.4391 Huy hiệu vàng8 Huy hiệu bạc27 Huy hiệu đồng1 gold badge8 silver badges27 bronze badges

Kennedy, John F.

Minh, Lai T.Use Wildcards. Hoặc trong macro, đặt giá trị .Find.MatchWildcards = True. Nếu bạn không làm vậy, Word sẽ chỉ hiểu wildcard như những kí tự thông thường.

Hướng dẫn python re wildcard - ký tự đại diện của trăn
Smith, John

Bài 2: Đảo ngày tháng nămngoặc vuông [], nhóm với ngoặc tròn (), lặp bằng @, cố định với <>, loại trừ sử dụng !. Với những biểu thức chính quy (regular expression) này bạn có thể tìm kiếm dựa vào những đoạn mẫu (pattern) cho văn bản của bạn. Một số mẫu: chỉ chứa kí tự nhất định, hoặc chứa số lượng kí tự nhất định.

7th August 2001 Word sử dụng tìm kiếm mẫu theo kiểu “lười biếng” (lazy pattern matching), có nghĩa là một khi tìm ra kết quả, việc tìm kiếm sẽ được dừng lại. Đối với hầu hết công cụ tìm kiếm của Unix, thuật toán sẽ cố gắng tìm và khớp càng nhiều càng tốt (“greedy” pattern matching), bởi vậy hãy cẩn thận khi sử dụng những công cụ này.

Find: ([0-9]{1,2}[dhnrst]{2}) () ([0-9]{4})

Replace: \2 \1, \3

Kết quả: August 7, 2001

Bài 3: Thêm hoặc xóa dấu chấm cuối câu

Người Mỹ thường xài dấu chấm sau Mr., Mrs., Dr. trong khi người Anh thường bỏ quên điều đó.: wildcard phân biệt chữ hoa/thường

Find: ([DM][rs]{1,2})( ) sẽ tìm những Mr Mrs Ms Dr thiếu dấu chấm.

Replace: \1.\2 sẽ thêm vào

  • Ngược lại:
    • Replace: \1
    • -> Xóa bớt dấu chấm
    • Bài 4: Đoạn văn bản trùng
    • Find: (*^13)\1\1 sẽ tìm kiếm 3 đoạn văn bản trùng nhau.
    • Replace: \1 sẽ xóa bớt 2 đoạn đi.
    • Bài 5: Các thẻ
    • Find: \)*\
    • Hoặc là
    • Rồi, giờ xóa nó đi bằng cách để trống replace.
  • Thực hành
    • Bài 1: Đảo họ và tên
    • Bài 2: Đảo ngày tháng năm
    • Bài 3: Thêm hoặc xóa dấu chấm cuối câu
    • Bài 4: Đoạn văn bản trùng
    • Bài 5: Các thẻ

Ngược lại:

Replace: \1

-> Xóa bớt dấu chấm

? sử dụng khi bạn muốn thay thế một kí tự.

* sử dụng khi bạn muốn thay thế nhiều kí tự.

s?t sẽ có thể tìm ra những từ như “sit”, “sat”, “set”… miễn là có 3 chữ, bắt đầu bởi s và kết thúc bởi t. Đồng thời nó cũng tìm kiếm sự kết hợp trong cùng một từ – khi đó phần tìm kiếm sẽ được đánh dấu. VD: s?t có thể trả về kết quả là cụm “set” nằm trong “inset”.

Trong khi đó, s*t sẽ trả về toàn bộ những từ như trên cộng với những từ hoặc cụm từ như “secret”, “secret” trong “secretary”, “serpent” hay thậm chí là “sign over document”.

Không giống như “?” luôn tìm kiếm kí tự bị thiếu, “*” sẽ tìm tất cả những gì ở giữa, kể cả không có kí tự nào cả. VD như s*t có thể sẽ trả về “st” hoặc “st” trong “streak”. Không có giới hạn cho sống lượng mà “*” sẽ tìm được. Bởi vậy hãy sử dụng nó một cách khôn ngoan hoặc là bạn sẽ kết thúc việc tìm kiếm với hàng ngàn megabyte tài liệu.“?” luôn tìm kiếm kí tự bị thiếu, “*” sẽ tìm tất cả những gì ở giữa, kể cả không có kí tự nào cả. VD như s*t có thể sẽ trả về “st” hoặc “st” trong “streak”. Không có giới hạn cho sống lượng mà “*” sẽ tìm được. Bởi vậy hãy sử dụng nó một cách khôn ngoan hoặc là bạn sẽ kết thúc việc tìm kiếm với hàng ngàn megabyte tài liệu.

2.”@”

“@” được sử dụng để tìm kiếm một hoặc nhiều lần xuất hiện lặp lại của kí tự trước nó. Ví dụ: “lo@t” sẽ trả về “lot”, “lot” trong “lotus”, “loot”, “looot”… nhưng không trả về “loat”. được sử dụng để tìm kiếm một hoặc nhiều lần xuất hiện lặp lại của kí tự trước nó. Ví dụ: “lo@t” sẽ trả về “lot”, “lot” trong “lotus”, “loot”, “looot”… nhưng không trả về “loat”.

3. “”

Sử dụng cặp dấu lớn hơn/nhỏ hơn với bất kỳ kí tự nào bên trên để đánh dấu điểm đầu hoặc cuối của từ. Chẳng hạn khi sử dụng với “*”:  sẽ tìm những cụm từ như “secret”, “serpent”, “sign over document” nhưng không trả về “secret” trong “secretary”, “set” trong “toolset”.“*” sẽ tìm những cụm từ như “secret”, “serpent”, “sign over document” nhưng không trả về “secret” trong “secretary”, “set” trong “toolset”.

Nó vẫn sẽ trả về “set” trong “tea-set”.

Cặp  sẽ tìm kiếm mọi cụm từ bắt đầu từ chữ đầu tiên cho tới từ cuối cùng có kết thúc bằng chữ cuối cùng. Như là  sẽ tìm bất cứ cụm từ nào bắt đầu bằng s và kết thúc với t.<> sẽ tìm kiếm mọi cụm từ bắt đầu từ chữ đầu tiên cho tới từ cuối cùng có kết thúc bằng chữ cuối cùng. Như là  sẽ tìm bất cứ cụm từ nào bắt đầu bằng s và kết thúc với t.

Cặp  có thể sử dụng cùng nhau hoặc riêng lẻ. Chẳng hạn, “fu@l>” sẽ tìm “fuuuul”, “ful” trong “wilful”, nhưng sẽ không trả “ful” trong “fully” hoặc “wilfully”.<> có thể sử dụng cùng nhau hoặc riêng lẻ. Chẳng hạn, “fu@l>” sẽ tìm “fuuuul”, “ful” trong “wilful”, nhưng sẽ không trả “ful” trong “fully” hoặc “wilfully”.

4. []

Dấu ngoặc vuông luôn sử dụng theo cặp để xác định cụ thể chi tiết kí tự hoặc vùng kí tự. Ví dụ:

[abc] sẽ tìm tất cả kí tự a, b và c trong từ. [S] sẽ tìm kí tự “S” được viết hoa. Khi nhập [abc] trong từ “Secretary”, “c”và “a” sẽ được tìm kiếm.

[A-Z] sẽ tìm tất cả chữ cái được viết hoa. [0-9] sẽ tìm tất cả các số. [13579] tìm tất cả số lẻ và tương tự với số chẵn. [0-9A-z] sẽ tìm mọi chữ hoặc số.

Bạn có thể sử dụng kí tự hoặc chuỗi kí tự trong vùng [] bao gồm cả dấu cách. Các ký tự sẽ được xử lý theo thứ tự chữ và số theo thứ tự ưu tiên từ nhỏ tới lớn. Nếu bạn không chắc chắn ký tự nào nhỏ hơn, hãy mở hộp thoại Insert, phần Symbol.[] bao gồm cả dấu cách. Các ký tự sẽ được xử lý theo thứ tự chữ và số theo thứ tự ưu tiên từ nhỏ tới lớn. Nếu bạn không chắc chắn ký tự nào nhỏ hơn, hãy mở hộp thoại Insert, phần Symbol.

VD: [Z-A] sẽ không thể tìm kiếm được.

5. \

Nếu bạn muốn tìm kiếm một kí tự đặc biệt (chẳng hạn như “?”, “*”) hãy đặt dấu gạch ngược trước nó:“?”, “*”) hãy đặt dấu gạch ngược trước nó:

[\?] sẽ tìm kiếm “?” thay vì “\a” hay “\b”.

Nếu bạn muốn tìm kiếm chính dấu này, hãy ghi nó 2 lần: [\\]. Thỉnh thoảng cái này không hoạt động.[\\]. Thỉnh thoảng cái này không hoạt động.

Như đã nói ở trên, đây là list những kí tự được sử dụng như wildcard: ( [ ] { } < > ( ) – @ ? ! * \ )( [ ] { } < > ( ) – @ ? ! * \ )

6. [!]

[!] khá giống với [] ngoại trừ việc trong trường hợp này nó sẽ tìm kiếm những chuỗi không được liệt kê. Ví dụ: [!o]sẽ tìm kiếm mọi kí tự ngoại trừ “o”. Bạn có thể sử dụng tương tự như làm với vùng [], như là [!A-Z] – tìm kiếm mọi thứ ngoại trừ chữ hoa. khá giống với [] ngoại trừ việc trong trường hợp này nó sẽ tìm kiếm những chuỗi không được liệt kê. Ví dụ: [!o]sẽ tìm kiếm mọi kí tự ngoại trừ “o”. Bạn có thể sử dụng tương tự như làm với vùng [], như là [!A-Z] – tìm kiếm mọi thứ ngoại trừ chữ hoa.

7. {}

Dấu ngoặc nhọn được sử dụng để đếm sự xuất hiện của kí tự trước nó.

{n} sẽ tìm chính xác số lượng n chữ cái lặp lại của kí tự trước nó. Chẳng hạn, a{2} sẽ tìm kiếm “aa”.

{n,} tìm kiếm ít nhất n chữ cái lặp lại của kí tự. a{2,} sẽ tìm “aa”, “aaa”, “aaaa”…

Note: Việc đếm có thể sử dụng với chuỗi kí tự. Khi kết hợp như vậy, tác dụng của nó sẽ tăng lên đáng kể. Ví dụ như [deno]{4}, ngoài tìm kiếm “denn”, “oooo”, “nnnn” thì còn tìm kiếm cả “done”, “node”, “eden”. Hay là (ts, ){3} sẽ trả về “ts, ts, ts, “

8. ()

Dấu ngoặc tròn không có tác dụng tìm kiếm theo pattern, nhưng sẽ chia các pattern theo trình tự logic khi bạn muốn sắp xếp lại trong chức năng replace. Nó phải sử dụng theo cặp và sẽ được đánh dấu bởi số. không có tác dụng tìm kiếm theo pattern, nhưng sẽ chia các pattern theo trình tự logic khi bạn muốn sắp xếp lại trong chức năng replace. Nó phải sử dụng theo cặp và sẽ được đánh dấu bởi số.

VD: Nhập (John) (Smith) tại find và nhập \2 \1 tại replace. Kết quả sẽ là Smith John (lưu ý nhập dấu cách).(lưu ý nhập dấu cách).

Hoặc \2 sẽ trả về kết quả Smith.

Đồng thời thì placeholder như \1 \2 có thể sử dụng để tìm kiếm chuỗi: (Fred) \1 sẽ tìm kiếm Fred Fred.

Dấu ngoặc tròn vô cùng hữu dụng khi sử dụng cùng wildcard trong những tình huống phức tạp cũng như khi dùng với replace.

9. ^

Dấu mũ “^” không phải là đặc trưng cho tìm kiếm ký tự đại diện nhưng đôi khi nó được sử dụng hơi khác so với bình thường.“^” không phải là đặc trưng cho tìm kiếm ký tự đại diện nhưng đôi khi nó được sử dụng hơi khác so với bình thường.

Tại hộp thoại Find & Replace, nếu bạn click vào “Find what” và “Replace with” sau đó click vào “Special”, một danh sách những kí tự đặc biệt sẽ hiện ra. Chọn một kí tự trong đó và sẽ có một code được chèn vào . chẳng hạn như “Tab Character” sẽ được đại diện bằng “^t” hoặc Column Break là “^n”.

Một khi bạn biết code, bạn có thể nhập thẳng. Và đó là tác dụng của dấu mũ.

Hướng dẫn python re wildcard - ký tự đại diện của trăn
Nút Special

Tuy nhiên, những option từ nút “Special” khi tìm kiếm bằng wildcard khá là hạn chế so với tìm kiếm thông thường. Dưới đây là một số ví dụ đáng chú ý và cách giải quyết:

-Bạn muốn xác định đánh dấu trang (paragraph mark – ¶). Tìm kiếm bình thường sẽ là ^p, tuy nhiên ^p không hoạt động khi tìm kiếm bằng wildcard. Để áp dụng trong replace, bạn thay bằng ^13. Nhưng đồng thời những kí tự sai trông-giống-paragraph mark-nhưng-không-phải, cũng sẽ được chèn vào. Nên là hãy cẩn thận.

-Wildcard cũng sẽ không tìm được footnote/endnote mark. Hãy thay thế bằng ^2.

-Trong tìm kiếm thông thường bạn có thể sử dụng ^u đi kèm với code của kí tự để tìm kiếm theo code (chẳng hạn như ^u97 sẽ tìm những chữ “a”). Tuy nhiên tìm kiếm này sẽ không hoạt động khi tìm kiếm với wildcard. Vậy nên để giải quyết thì hãy copy paste thẳng vào, hoặc dùng trick Alt + code để nhập (Word 97 không xài được trick này).Word 97 không xài được trick này).

-Dường như không có cách nào để tìm kiếm các trường (field) bằng wildcard. Ngay cả ^19 (field code character code) cũng không hoạt động – có vẻ như đây là 1 bug.

Ngoài những trường hợp kể trên, đối với hầu hết kí tự đặc biệt hay các object, bạn có thể sử dụng cùng một code với tìm kiếm thông thường (^g= graphic – đồ họa, ^^= tìm kiếm dấu mũ).

Trong nhiều trường hợp, người ta có thể gán kí tự với số. Ví dụ hiển nhiên là ^13 cho “¶”. Thật không may là không thể dự đoán được độ chính xác khi thực hiện điều này. Nếu bạn có nhu cầu tìm kiếm bằng cách sử dụng số ký tự, hãy thử với một số trường hợp trước.

Thực hành

Bài 1: Đảo họ và tên

John Smith, Brian Jones và Alan Williams

Để đảo từng người, nhập thẳng tên vào mục find, nhập \2 \1 vào Replace: (John) (Smith) -> \2 \1.

Để đảo đồng loạt, tại mục Find nhập: () (). Tại replace: \2 \1

Nếu làm sai, ấn Undo (phím tắt Ctrl + Z) nhé!

Trong trường hợp tên viết tắt hoặc tên đệm?

John F. Kennedy

Lai T. Minh

John Smith

Find: (

Replace: \2, \1^p

Kết quả:

Kennedy, John F.

Minh, Lai T.

Smith, John

Bài 2: Đảo ngày tháng năm

7th August 2001

Find: ([0-9]{1,2}[dhnrst]{2}) () ([0-9]{4})

Replace: \2 \1, \3

Kết quả: August 7, 2001

Bài 3: Thêm hoặc xóa dấu chấm cuối câu

Người Mỹ thường xài dấu chấm sau Mr., Mrs., Dr. trong khi người Anh thường bỏ quên điều đó.

Find: ([DM][rs]{1,2})( ) sẽ tìm những Mr Mrs Ms Dr thiếu dấu chấm.

Replace: \1.\2 sẽ thêm vào

Ngược lại:

Find: ([DM][rs]{1,2}).

Replace: \1

-> Xóa bớt dấu chấm

Bài 4: Đoạn văn bản trùng

Find: (*^13)\1\1 sẽ tìm kiếm 3 đoạn văn bản trùng nhau.

Replace: \1 sẽ xóa bớt 2 đoạn đi.

Bài 5: Các thẻ

Find: \)*\

some text

Hoặc là

John Smith

Replace: \2, \1^p

Kết quả: