Đối sánh mẫu trong Python với Regex – khớp mẫu chuỗi trăn

Cổng thông tin Khoa học Máy tính dành cho những người yêu thích máy tính. Nó bao gồm các bài báo về khoa học máy tính và lập trình được viết tốt, được tư duy tốt và được giải thích tốt, các câu đố và thực hành / lập trình cạnh tranh / các câu hỏi phỏng vấn công ty.

Bạn đang xem : đối sánh mẫu chuỗi python

    Điều kiện tiên quyết: Biểu thức chính quy trong Python

    Có thể bạn đã quen với tính năng tìm kiếm văn bản bằng cách nhấn ctrl-F và nhập các từ bạn đang tìm kiếm. Biểu thức chính quy tiến thêm một bước nữa: Chúng cho phép bạn chỉ định một mẫu văn bản để tìm kiếm.
    Biểu thức chính quy, gọi tắt là regexes, là mô tả cho một mẫu văn bản. Ví dụ: a \ d trong regex là viết tắt của một ký tự chữ số – tức là bất kỳ chữ số nào từ 0 đến 9.

    Tạo đối tượng Regex

    Tất cả các hàm regex trong Python đều nằm trong mô-đun re

    Để tạo đối tượng Regex khớp với mẫu số điện thoại, hãy nhập thông tin sau vào trình bao tương tác.

    Bây giờ biến phoneNumRegex chứa một đối tượng Regex.

    Đối sánh các đối tượng regex

    Phương thức search () của đối tượng Regex tìm kiếm chuỗi mà nó được truyền vào cho bất kỳ kết quả phù hợp nào với regex. Đối tượng đối sánh có phương thức group () sẽ trả về văn bản đối sánh thực tế từ chuỗi được tìm kiếm.

    Kết quả:

    Các bước đối sánh cụm từ thông dụng < / strong>

    Mặc dù có một số bước để sử dụng biểu thức chính quy trong Python, nhưng mỗi bước khá đơn giản.

  1. Nhập mô-đun regex bằng cách nhập lại.
  2. Tạo một đối tượng Regex bằng hàm re.compile (). (Hãy nhớ sử dụng một chuỗi thô.)
  3. Chuyển chuỗi bạn muốn tìm kiếm vào phương thức search () của đối tượng Regex. Thao tác này trả về đối tượng Khớp.
  4. Gọi phương thức group () của đối tượng Khớp để trả về một chuỗi văn bản phù hợp thực tế.
  5. Nhóm bằng dấu ngoặc đơn < / strong>

    1. Đối tượng phù hợp: Giả sử bạn muốn tách mã vùng khỏi phần còn lại của số điện thoại. Thêm dấu ngoặc đơn sẽ tạo các nhóm trong regex: (\ d \ d \ d) – (\ d \ d \ d- \ d \ d \ d \ d). Sau đó, bạn có thể sử dụng phương thức đối tượng khớp nhóm () để lấy văn bản phù hợp chỉ từ một nhóm.

      < br />

      nhập re

      phoneNumRegex = re. biên dịch (r '(\ d \ d \ d) - (\ d \ d \ d- \ d \ d \ d \ d) ' )

      mo = phoneNumRegex.search ( < code class = "string"> ‘Số của tôi là 415-555-4242.’ )

      print (mo .group ( 1 ))

       
       

      ĐẦU RA:

      '415'
      
    2. Truy xuất tất cả các nhóm cùng một lúc: Nếu bạn muốn truy xuất tất cả các nhóm cùng một lúc, hãy sử dụng phương thức groups (), — lưu ý dạng số nhiều cho tên.

      < br />

      nhập re

      phoneNumRegex = chức năng re. biên dịch (r '(\ d \ d \ d) - (\ d \ d \ d- \ d \ d \ d \ d) ' )

      mo = phon eNumRegex.search ( 'Số của tôi là 415-555-4242.' )

      print (mo.groups ())

       
       

      ĐẦU RA:

      ('415', '555-4242') 
    3. Sử dụng mo.groups: mo.groups () sẽ trả về nhiều giá trị, bạn có thể sử dụng thủ thuật gán nhiều lần để gán mỗi giá trị cho một biến riêng biệt, như trong dòng Mã vùng sau, mainNumber = mo.groups ().

      nhập lại

      phoneNumRegex = re. biên dịch (r '(\ d \ d \ d) - (\ d \ d \ d- \ d \ d \ d \ d)' )

      mo = phoneNumRegex.search ( 'Số của tôi là 415-555-4242.' )

      areaCode, mainNumber = mo.groups ()

      print (mainNumber)

       
       

      ĐẦU RA:

      '555-4242' 
    4. So khớp dấu ngoặc đơn: Dấu ngoặc đơn có ý nghĩa đặc biệt trong biểu thức chính quy, nhưng bạn phải làm gì nếu bạn cần so khớp dấu ngoặc đơn trong chữ. Ví dụ: có thể số điện thoại bạn đang cố gắng đối sánh có mã vùng được đặt trong dấu ngoặc đơn. Trong trường hợp này, bạn cần phải thoát khỏi các ký tự (và) bằng dấu gạch chéo ngược. Nhập thông tin sau vào shell tương tác:

      nhập lại

      phoneNumRegex = re. < code class = "functions"> biên dịch (r '(\ (\ d \ d \ d \)) (\ d \ d \ d- \ d \ d \ d \ d) ' )

      mo = phoneNumRegex.search ( 'Điện thoại của tôi số là (415) 555-4242. ' )

      print (mo.group ( 1 ))

       

      < pre id = "ide-url">

      ĐẦU RA:

      '(415)' 

      Các ký tự \ (và \) trong chuỗi thô được chuyển tới re.compile () sẽ khớp với các ký tự trong dấu ngoặc đơn thực tế.

    < p align = "center"> Khớp Nhiều Nhóm với Ống

    | ký tự được gọi là một đường ống. Bạn có thể sử dụng nó ở bất cứ đâu bạn muốn để khớp với một trong nhiều biểu thức. Ví dụ: cụm từ thông dụng r'Batman | Tina Fey 'sẽ khớp với "Batman" hoặc "Tina Fey".

    Khi cả Batman và Tina Fey xuất hiện trong chuỗi được tìm kiếm, lần xuất hiện đầu tiên của văn bản phù hợp sẽ được trả về dưới dạng đối tượng Match. Nhập thông tin sau vào shell tương tác:

    nhập lại

    heroRegex = re. < / code> biên dịch (r 'Batman | Tina Fey' )

    mo1 = heroRegex.search ( 'Batman và Tina Fey.' )

    print (mo1.group ())

     
     

    ĐẦU RA:

    'Người dơi' 

    Đối sánh các lần lặp lại cụ thể với dấu ngoặc nhọn

    Nếu bạn có một nhóm mà bạn muốn lặp lại một số lần cụ thể , hãy theo dõi nhóm trong regex của bạn với một số trong dấu ngoặc nhọn. Ví dụ: regex (Ha) {3} sẽ khớp với chuỗi 'HaHaHa', nhưng nó sẽ không khớp với 'HaHa', vì chuỗi sau chỉ có hai lần lặp lại của nhóm (Ha).

    Thay vào đó của một số, bạn có thể chỉ định một phạm vi bằng cách viết số tối thiểu, dấu phẩy và số tối đa ở giữa các dấu ngoặc nhọn. Ví dụ: regex (Ha) {3, 5} sẽ khớp với 'HaHaHa', 'HaHaHaHa' và 'HaHaHaHaHa'.

    Bạn cũng có thể bỏ số thứ nhất hoặc thứ hai trong dấu ngoặc nhọn để để lại mức tối thiểu hoặc tối đa không bị giới hạn. Ví dụ: (Ha) {3,} sẽ khớp với ba hoặc nhiều trường hợp của nhóm (Ha), trong khi (Ha) {, 5} sẽ khớp từ 0 đến năm trường hợp. Dấu ngoặc nhọn có thể giúp làm cho cụm từ thông dụng của bạn ngắn hơn. Hai biểu thức chính quy này khớp với các mẫu giống hệt nhau:

     (Ha) {3}
    (Ha) (Ha) (Ha) 

    Và hai biểu thức chính quy này cũng khớp với các mẫu giống hệt nhau:

     (Ha) {3, 5}
    ((Hà) (Ha) (Ha)) | ((Ha) (Ha) (Ha) (Ha)) | ((Ha) (Ha) (Ha) (Ha) (Ha)) 

    Nhập nội dung sau vào trình bao tương tác:

    < p class = "ring-load" id = "run-code-loader">

    nhập lại < / p>

    haRegex = lại. biên dịch (r '(Ha) {3}' )

    mo1 = haRegex.search ( 'HaHaHa' ) < / p> < p class = "line number7 index6 alt2"> print (mo1.group ())

     
     

    ĐẦU RA:

    < trước>
    'HaHaHa'

    < br />

    nhập re

    haRegex = re. biên dịch (r '(Ha) {3}' )

    mo2 = < code class = "trơn"> haRegex.search ( 'Ha' ) = = Không có

    print (mo2)

    < / p>

     
     

    ĐẦU RA:

    ĐÚNG VẬY
    

    Ở đây, (Ha) {3} khớp với ‘HaHaHa’ nhưng không khớp với ‘Ha’. Vì nó không khớp với 'Ha', search () trả về Không có.

    Đối sánh tùy chọn với Dấu hỏi

    Đôi khi ở đó là một mẫu mà bạn chỉ muốn kết hợp theo tùy chọn. Đó là, regex sẽ tìm thấy sự trùng khớp cho dù bit văn bản đó có ở đó hay không. Các ? ký tự gắn cờ nhóm đứng trước nó như một phần tùy chọn của mẫu. Ví dụ: nhập thông tin sau vào shell tương tác:

    < p class = "line number3 index2 alt2">

    nhập lại

    batRegex = lại. biên dịch (r 'Bat (wo)? man' < / code> )

    mo1 = batRegex.search ( 'Những cuộc phiêu lưu của Người dơi' )

    print (mo1.group ())

     
     

    ĐẦU RA:

    'Người dơi' 

    < br />

    nhập re

    batRegex = re. biên dịch (r 'Bat (wo)? man' )

    mo2 = < code class = "trơn"> batRegex.search ( 'Cuộc phiêu lưu của Batwoman' )

    print (mo2.group ())

      
     

    ĐẦU RA:

    'Batwoman' 

    Cái (wo)? một phần của biểu thức chính quy có nghĩa là mẫu wo là một nhóm tùy chọn. Regex sẽ khớp với văn bản không có phiên bản nào hoặc một phiên bản wo trong đó. Đây là lý do tại sao regex phù hợp với cả ‘Batwoman’ và ‘Batman’.
    Bạn có thể nghĩ đến? như nói, “So khớp số 0 hoặc một trong nhóm đứng trước dấu chấm hỏi này.”
    Nếu bạn cần khớp một ký tự dấu hỏi thực tế, hãy loại bỏ ký tự đó bằng \ ?.

    < p align = "center"> Đối sánh 0 hoặc nhiều hơn với dấu sao

    * (được gọi là dấu sao hoặc dấu sao) có nghĩa là “so khớp 0 hoặc nhiều hơn” —nhóm đứng trước dấu sao có thể xuất hiện bất kỳ số lần nào trong văn bản. Nó có thể hoàn toàn vắng mặt hoặc lặp đi lặp lại nhiều lần. Hãy xem lại ví dụ về Batman.

    nhập lại

    batRegex = re. < / code> biên dịch (r 'Bat (wo) * man' )

    mo1 = batRegex.search ( 'Cuộc phiêu lưu của Người Dơi' )

    print (mo1.group ())

     
     

    ĐẦU RA:

    'Người dơi' 

    < br />

    nhập re

    batRegex = re. biên dịch (r 'Bat (wo) * man' )

    mo2 = < code class = "trơn"> batRegex.search ( 'Cuộc phiêu lưu của Batwoman' )

    print (mo2.group ())

      
     

    ĐẦU RA:

    'Batwoman' 

    < br />

    nhập re

    batRegex = re. biên dịch (r 'Bat (wo) * man' )

    mo3 = batRegex.search ( 'Cuộc phiêu lưu của Batwowowowoman' )

    print (mo3.group ())

     
     

    ĐẦU RA:

    'Batwowowowoman' 

    Đối với ‘Batman’, phần (wo) * của regex khớp với 0 trường hợp wo trong chuỗi; đối với ‘Batwoman’, (wo) * khớp với một trường hợp của wo; và đối với 'Batwowowowoman', (wo) * đối sánh với bốn trường hợp của wo.

    Nếu bạn cần đối sánh một ký tự dấu sao thực, hãy đặt trước dấu sao trong biểu thức chính quy bằng một dấu gạch chéo ngược, \ *.

    Đối sánh một hoặc nhiều hơn với dấu cộng

    Trong khi * có nghĩa là “so khớp không hoặc nhiều hơn”, dấu + (hoặc cộng) có nghĩa là “So khớp một hoặc nhiều.” Không giống như dấu sao, không yêu cầu nhóm của nó xuất hiện trong chuỗi đã so khớp, nhóm đứng trước dấu cộng phải xuất hiện ít nhất một lần. Nó không phải là tùy chọn. Nhập thông tin sau vào shell tương tác và so sánh với biểu tượng dấu sao trong phần trước:

    < p>

    nhập lại

    batRegex = re. biên dịch (r 'Bat (wo) + man' )

    mo1 < / code> = batRegex.search ( 'Những cuộc phiêu lưu của Batwoman' )

    print (mo1. group ())

     
     

    ĐẦU RA:

    'Batwoman' 

    < br />

    nhập re

    batRegex = re. biên dịch (r 'Bat (wo) + man' )

    mo2 = < code class = "trơn"> batRegex.search ( 'Cuộc phiêu lưu của Batwowowowoman' )

    in (mo2.group ())

     
     

    ĐẦU RA:

    'Batwowowowoman' 

    batRegex = re.compile (r'Bat (wo) + man ')

    < p class = "line number2 index1 alt1">

    nhập < / code> re

    batRegex = re. biên dịch (r 'Bat (wo) + man' )

    mo3 = batRegex.search ( 'Những cuộc phiêu lưu của Người dơi ' ) = < code class = "keyword"> = Không có

    print < / code> (mo3)

      
     

    ĐẦU RA:

    Đúng 

    Regex Bat (wo) + man sẽ không khớp với chuỗi 'Cuộc phiêu lưu của Người dơi' vì phải có ít nhất một wo bằng dấu cộng.

    Nếu bạn cần khớp với một dấu cộng thực tế , hãy thêm tiền tố vào dấu cộng bằng dấu gạch chéo ngược để thoát khỏi nó: \ +.

    Ghi chú cá nhân của tôi


Xem thêm những thông tin liên quan đến chủ đề khớp mẫu chuỗi trăn

#216. BS Wynn hướng dẫn tập trị liệu giảm đau khớp gối

  • Tác giả: Dr. Wynn Tran Official
  • Ngày đăng: 2020-07-19
  • Đánh giá: 4 ⭐ ( 6326 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Khớp gối là khớp lớn nhất và là một trong những khớp quan trọng nhất trong cơ thể. Đau khớp gối có nhiều lý do như viêm thoái hoá, gout (gút), viêm khớp, chấn thương cơ gân, hay sưng phù nước, v..v... Vì vậy, chữa đau khớp gối thường bắt đầu bằng việc đi gặp BS để chẩn đoán chính xác, tìm ra lý do, và chữa trị thích hợp.

    Chữa trị đau khớp gối thường kết hợp uống thuốc, kem, và trị liệu giảm đau. Phẫu thuật là liệu pháp sau cùng nếu như các liệu pháp ban đầu không hiệu quả.

    Lưu ý các bài tập dưới đây chỉ là gợi ý vì chẩn đoán đau khớp gối phải do BS thăm khám và tìm ra nguyên nhân, sau đó BS sẽ gửi đi trị liệu nếu cần thiết.

    Tập trị liệu giảm đau khớp gối thế nào?
    Có 13 cơ bắp và 4 xương chính trong khớp gối, chia làm 4 nhóm cơ chính: cơ bắp chuối, cơ đùi trước, cơ đùi sau, và cơ hai bên hông khớp gối. Tập trị liệu có thể giảm đau bằng nhiều cách như
    - Tăng khoảng cách vận động của khớp (Range of Motion). Thường đau khớp gối thường xuyên sẽ khiến khoảng ROM giảm do khớp bị đau. Tập trị liệu chậm và theo thời gian sẽ giúp kéo dãn khoảng vận động, từ đó làm cơ xoay dễ hơn, và dẫn đến giảm đau
    - Tăng sức mạnh của các cơ khớp gối. Bệnh nhân viêm khớp thường ít vận động hơn do đau nhức, dẫn đến các cơ xung quanh khớp yếu đi. Tập trị liệu làm các cơ này mạnh khoẻ, hỗ trợ lẫn nhau, làm giảm cơn đau
    - Tập kết hợp các khớp khác để hỗ trợ, bổ sung cho khớp bị đau. Thường đau khớp gối nếu không chữa lâu dài sẽ dẫn đến đi đứng sai tư thế, dẫn đến đau lưng hay đau chân, hoặc ngược lại. Đau lưng không chữa trị cũng có thể dẫn đến đau khớp gối. Lý do vì tất cả các khớp lân cận đều làm việc chung với nhau khi chúng ta vận động. Khi một khớp đau yếu thì các khớp khác sẽ cố bù đắp.
    - Tập xoa bóp tại chỗ (mát xa) dùng tay hay các bịt nóng lạnh cũng có giảm đau hoặc giảm viêm sưng
    - Tăng sức đề kháng thông qua lưu thông huyết mạch tốt hơn

    Cách tập trị liệu đúng: Tuỳ vào mỗi bệnh nhân, mỗi cấp độ đau khớp mà chuyên viên vật lý trị liệu hay BS chuyên khoa sẽ có bài tập hướng dẫn cụ thể. Quy tắc chung là
    - Tập chậm và dần dần trong khả năng của bệnh nhân, ngưng tập ngay khi cảm giác đau nhức mỏi hay khó chịu
    - Tập nhiều lần trong ngày và liên tục để tạo thói quen và sức bền
    - Tập kết hợp với các khớp và cơ khác gần chỗ đau như khớp háng, cổ chân, trong trường hợp đau khớp gối để tạo ra hoạt động nhịp nhàng cho khớp bị đau- Tập kết hợp quan sát cơ thể, nhịp tim, mồ hôi, hơi thở và các biểu hiện khác của cơ thể.

    Các bài tập trị liệu cơ bản cho đau khớp gối
    Thường các chuyên gia sẽ phân loại bài tập chữa đau khớp thành 2 nhóm
    - Bài tập giãn cơ với mục đích khôi phục độ linh hoạt của nhóm cơ khớp gối.
    - Bài tập tăng sức mạnh cơ, nhằm tăng khả năng chống đỡ, bảo vệ, và làm việc hiệu quả các nhóm cơ chung với nhau.

    Mời quý vị xem video chi tiết các bài tập , quý vị nhớ đang kí (subscribe) để nhận những video mới nhất

    1. Bài tập giãn cơ bắp chuối và massage xương bánh chè
    2. Bài tập giãn cơ đùi dưới
    3. Bài tập giãn cơ đùi trên
    4. Bài tâp tăng cơ đùi trên
    5. Bài tập tăng cơ đùi dưới
    6. Bài tập tăng cơ bắp chuối
    7. Bài tâp tăng cơ hai bên khớp gối
    Cảm ơn quý vị

Các hàm xử lý chuỗi trong SQL

  • Tác giả: shareprogramming.net
  • Đánh giá: 3 ⭐ ( 6606 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Trong SQL cũng tương tự các ngôn ngữ lập trình khác, cung cấp các hàm xử lý chuỗi. Dưới đây là danh sách các hàm được hỗ trợ

: Khớp mẫu trên một chuỗi

  • Tác giả: vi.androidnetc.org
  • Đánh giá: 3 ⭐ ( 7005 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Tôi đã tự hỏi liệu có cách nào để làm điều gì đó như thế này trong c # 7 var test = "aaeag"; switch (test) {case test.StartsWith ("a"): break; ...

Bài toán so khớp chuỗi văn bản OtoMat

  • Tác giả: 123docz.net
  • Đánh giá: 4 ⭐ ( 4146 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Bài toán so khớp chuỗi văn bản OtoMat . bài toán này. Sau đây, chúng ta cùng tìm hiểu một thuật toán so khớp chuỗi sử dụng Otomat. Otomat so khớp chuỗi rất hiệu quả: chúng xét mỗi ký tự văn bản. là so khớp chuỗi. So khớp chuỗi là thực hiện tìm kiếm và xác định

Sử dụng toán tử Like và ký tự đại diện trong so sánh chuỗi

  • Tác giả: support.microsoft.com
  • Đánh giá: 3 ⭐ ( 2569 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Bài viết này mô tả các ký tự đại diện mà bạn có thể sử dụng với các toán tử như vậy.

Các mẫu so khớp đơn giản

  • Tác giả: ngocminhtran.com
  • Đánh giá: 5 ⭐ ( 5765 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Trong phần này chúng ta sẽ tìm hiểu các cách đơn giản để so khớp với các mẫu dùng: Các chuỗi tầm thường (string literals) Các kí số (digits) Các kí tự (letters) Các kí tự đại diện (characters of any kind) Công cụ RegExr Ở phần trước chúng ta đã dùng công cụ Regex…

Khớp mẫu cho phép trong chuỗi

  • Tác giả: qastack.vn
  • Đánh giá: 5 ⭐ ( 1205 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: [Tìm thấy giải pháp!] Cuối cùng tôi cũng tìm được một khảo sát hay của Kitaev và Mansour , trong…

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

Xem Thêm  Chuỗi Python (Có ví dụ) - cách sử dụng chuỗi trong python