Python trích xuất văn bản giữa hai mẫu

Trong ví dụ này, chúng tôi đang sử dụng bộ dữ liệu Kaggle. Nếu bạn muốn tìm hiểu thêm về cách đọc Kaggle dưới dạng Pandas DataFrame, hãy xem bài viết này. Cách tìm kiếm và tải xuống bộ dữ liệu Kaggle cho Pandas DataFrame

Bước 1. Kết hợp văn bản giữa hai chuỗi

Để bắt đầu với một ví dụ đơn giản, hãy có một văn bản tiếp theo

bước 1 một số văn bản bước 2 nhiều văn bản hơn bước 3 sau đó nhiều văn bản hơn

và chúng tôi muốn trích xuất mọi thứ trong khoảng từ

import re
s = 'step 1 some text step 2 more text step 3 then more text'
re.search[r'step 1[.*?]step 2', s].group[1]
0 đến
import re
s = 'step 1 some text step 2 more text step 3 then more text'
re.search[r'step 1[.*?]step 2', s].group[1]
1. Để làm như vậy, chúng tôi sẽ sử dụng nhóm chụp như

import re
s = 'step 1 some text step 2 more text step 3 then more text'
re.search[r'step 1[.*?]step 2', s].group[1]

kết quả

' some text '

Làm thế nào nó hoạt động

  • import re
    s = 'step 1 some text step 2 more text step 3 then more text'
    re.search[r'step 1[.*?]step 2', s].group[1]
    
    0 - khớp với các ký tự bước 1 theo nghĩa đen [phân biệt chữ hoa chữ thường]
  • import re
    s = 'step 1 some text step 2 more text step 3 then more text'
    re.search[r'step 1[.*?]step 2', s].group[1]
    
    3 - khớp với bất kỳ ký tự nào trong khoảng từ 0 đến không giới hạn số lần mở rộng khi cần [lười biếng]
  • import re
    s = 'step 1 some text step 2 more text step 3 then more text'
    re.search[r'step 1[.*?]step 2', s].group[1]
    
    1 - khớp với các ký tự bước 2 theo nghĩa đen [phân biệt chữ hoa chữ thường]

Tìm kiếm không lười biếng

Ví dụ trước sẽ dừng cho đến khi tìm thấy văn bản thỏa mãn nó. Nếu bạn muốn giải nén

some text step 2 more text

Sau đó, bạn cần thay đổi tìm kiếm thành

________số 8_______

Bước 2. Kết hợp văn bản giữa hai mẫu

Bây giờ, giả sử bạn muốn khớp một mẫu chứ không phải văn bản cố định. Trong ví dụ này, chúng ta sẽ xem cách trích xuất

import re
s = 'step 1 some text step 2 more text step 3 then more text'
re.search[r'step 1[.*?]step 2', s].group[1]
5 theo sau là một chữ số

import re
s = 'step 1 some text\nstep 2 more text\nstep 3 then more text\nconclusion'
re.findall[r'[?:step \d][.*?][?:\n]', s]

Vì vậy, có văn bản tiếp theo

step 1 some text
step 2 more text
step 3 then more text
conclusion

Chúng tôi sẽ trích xuất

[' some text', ' more text', ' then more text']

Làm thế nào nó hoạt động?

  • import re
    s = 'step 1 some text step 2 more text step 3 then more text'
    re.search[r'step 1[.*?]step 2', s].group[1]
    
    6 - Nhóm không thu thập -
    import re
    s = 'step 1 some text step 2 more text step 3 then more text'
    re.search[r'step 1[.*?]step 2', s].group[1]
    
    7 - nó sẽ được khớp nhưng không được trích xuất
    • import re
      s = 'step 1 some text step 2 more text step 3 then more text'
      re.search[r'step 1[.*?]step 2', s].group[1]
      
      8 - khớp với bước ký tự theo nghĩa đen [phân biệt chữ hoa chữ thường] theo sau là một chữ số [tương đương với [0-9]]
  • import re
    s = 'step 1 some text step 2 more text step 3 then more text'
    re.search[r'step 1[.*?]step 2', s].group[1]
    
    3 - Nhóm chụp đầu tiên - chụp mọi thứ ở chế độ lười biếng
  • ' some text '
    
    0 - Nhóm không bắt giữ
    • ' some text '
      
      1 khớp với một ký tự xuống dòng

Bước 3. Kết hợp văn bản giữa hai mẫu Lười biếng và Tham lam

Trong bước này, chúng tôi sẽ giải thích rõ hơn về trận đấu lười biếng và tham lam. Sự khác biệt có thể được giải thích là

Một cách tiếp cận phổ biến cho việc này là sử dụng một máy trạng thái đọc văn bản cho đến khi gặp điểm đánh dấu , sau đó bắt đầu "chế độ ghi" và trích xuất văn bản cho đến khi gặp điểm đánh dấu . Quá trình này có thể lặp lại nếu nhiều phần có thể xuất hiện trong tệp và phải được trích xuất

inRecordingMode = False
for line in file:
    if not inRecordingMode:
        if line.startswith['']:
            inRecordingMode = True
    elif line.startswith['']:
        inRecordingMode = False
    else:
        yield line

Đối với các trường hợp đơn giản, điều này cũng có thể được giải quyết bằng biểu thức chính quy

Trong hướng dẫn tách chuỗi trong Python này, chúng ta sẽ khám phá nhiều cách khác nhau mà chúng ta có thể sử dụng ngôn ngữ để tách chuỗi chính xác. Khi chúng ta tách chuỗi giữa các ký tự trong Python, có thể trích xuất một phần của chuỗi từ toàn bộ [còn được gọi là chuỗi con]

Học cách tách chuỗi sẽ hữu ích cho bất kỳ lập trình viên Python nào. Cho dù bạn có ý định sử dụng Python để phát triển web, khoa học dữ liệu hay xử lý ngôn ngữ tự nhiên, thì việc tách chuỗi sẽ là một thao tác thông thường

Chúng tôi sẽ làm theo một số quy trình để lấy chuỗi con trong Python. Đầu tiên, chúng ta sẽ xem xét ký hiệu mối nối và hàm split[]. Sau đó, chúng tôi sẽ kiểm tra các kỹ thuật nâng cao hơn, chẳng hạn như regex

Tách một chuỗi giữa các ký tự bằng ký hiệu lát

Khi nói đến việc tách chuỗi, ký hiệu lát cắt là một lựa chọn rõ ràng cho các nhà phát triển Python. Với ký hiệu lát cắt, chúng ta có thể tìm thấy một phần con của một chuỗi

Thí dụ. Tách một chuỗi với ký hiệu lát

text = """BERNARDO
Well, good night.
If you do meet Horatio and Marcellus,
The rivals of my watch, bid them make haste."""

speaker = text[:8]

print[speaker]

đầu ra

BERNARDO

Tách một chuỗi theo vị trí ký tự

Để sử dụng phương pháp này, chúng ta cần biết vị trí bắt đầu và kết thúc của chuỗi con mà chúng ta muốn cắt. Chúng ta có thể sử dụng phương thức index[] để tìm chỉ số của một ký tự trong chuỗi

Thí dụ. Cách tìm chỉ mục của một ký tự trong chuỗi

sentence = "Jack and Jill went up the hill."

index1 = sentence.index["J",0]
print[index1]

index2 = sentence.index["J",1]
print[index2]

đầu ra

0
9

Hướng dẫn nhanh để sử dụng split[]

Thư viện chuẩn Python đi kèm với chức năng tách chuỗi. hàm split[]. Chức năng này có thể được sử dụng để tách chuỗi giữa các ký tự. Hàm split[] nhận hai tham số. Đầu tiên được gọi là dấu tách và nó xác định ký tự nào được sử dụng để tách chuỗi

Hàm split[] trả về danh sách các chuỗi con từ chuỗi ban đầu. Bằng cách chuyển các giá trị khác nhau cho hàm split[], chúng ta có thể chia chuỗi theo nhiều cách khác nhau

Tách chuỗi bằng hàm split[]

Chúng ta có thể chỉ định ký tự để tách một chuỗi bằng cách sử dụng dấu tách trong hàm split[]. Theo mặc định, split[] sẽ sử dụng khoảng trắng làm dấu phân cách, nhưng chúng tôi có thể cung cấp các ký tự khác nếu muốn

Thí dụ. Tách một chuỗi bằng khoảng trắng

sentence = "The quick brown fox jumps over the lazy dog."

# split a string using whitespace
words = sentence.split[]

print[words]

đầu ra

['The', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog.']

Thí dụ. Tách một chuỗi được phân tách bằng dấu phẩy

rainbow = "red,orange,yellow,green,blue,indigo,violet"

# use a comma to separate the string
colors = rainbow.split[',']

print[colors]

đầu ra

['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet']

Sử dụng split[] với Nhiều đối số

Sử dụng hàm split[], chúng ta cũng có thể kiểm soát số lượng dòng văn bản được chia. Hàm này nhận tham số thứ hai. chia tối đa. Biến này cho hàm split[] biết cần thực hiện bao nhiêu lần chia

Thí dụ. Tách nhiều dòng văn bản

text = """HORATIO
Before my God, I might not this believe
Without the sensible and true avouch
Of mine own eyes."""

lines = text.split[maxsplit=1]

print[lines]

đầu ra

['HORATIO', 'Before my God, I might not this believe\nWithout the sensible and true avouch\nOf mine own eyes.']

Bởi vì chúng tôi đặt maxsplit thành giá trị 1, văn bản được chia thành hai chuỗi con

Cách tách một chuỗi giữa hai ký tự giống hệt nhau

Nếu chúng ta có một văn bản được chia bởi nhiều ký tự giống nhau, chúng ta có thể sử dụng hàm split[] để tách các chuỗi giữa các ký tự

Thí dụ. Sử dụng các ký hiệu để tách một chuỗi

BERNARDO
0

đầu ra

BERNARDO
1

Cách tìm một chuỗi giữa hai ký hiệu

Chúng ta có thể kết hợp hàm index[] với ký hiệu lát để trích xuất một chuỗi con từ một chuỗi. Hàm index[] sẽ cung cấp cho chúng ta vị trí bắt đầu và kết thúc của chuỗi con. Khi chúng tôi biết vị trí của các ký hiệu [$ trong trường hợp này], chúng tôi sẽ trích xuất chuỗi bằng ký hiệu lát

Thí dụ. Trích xuất một chuỗi con bằng hàm index[]

BERNARDO
2

đầu ra

BERNARDO
3

Cách sử dụng biểu thức chính quy để tách một chuỗi giữa các ký tự

Biểu thức chính quy là một cách thuận tiện để tìm kiếm một chuỗi hoặc văn bản cho các mẫu. Vì các mẫu biểu thức chính quy [regex] rất linh hoạt nên chúng có thể được sử dụng để tạo các tìm kiếm được nhắm mục tiêu.  

Python đi kèm với thư viện re. Với regex, chúng ta có thể tìm kiếm văn bản bằng một chiếc lược tốt, tìm kiếm các từ, cụm từ cụ thể hoặc thậm chí các từ có độ dài nhất định

Thí dụ. Sử dụng biểu thức chính quy để tìm kiếm một chuỗi

BERNARDO
4

đầu ra

BERNARDO
5

Thí dụ. Sử dụng regex để tìm ngày

BERNARDO
6

đầu ra

BERNARDO
7

Trong các ví dụ trên, chúng tôi đã sử dụng phương thức search[] để tìm một chuỗi con bằng cách sử dụng các mẫu biểu thức chính quy. Phương thức này có hai đối số. Đầu tiên là mẫu biểu thức chính quy của chúng tôi và thứ hai là chuỗi chúng tôi muốn thực hiện tìm kiếm trên đó

Cụm từ thông dụng sử dụng các ký tự và số đặc biệt để tạo các tìm kiếm được nhắm mục tiêu. Chẳng hạn, ví dụ đầu tiên của chúng tôi sử dụng các ký tự đặc biệt \w để tìm kiếm các từ

Các ký tự đặc biệt cho biểu thức chính quy

  • /w – Tìm kiếm các ký tự chữ và số [từ]
  • /d – Tìm kiếm các ký tự chữ số [0-9]
  • /s – Tìm kiếm các ký tự khoảng trắng

Thí dụ. Tìm nếu một chuỗi bắt đầu bằng một từ với regex

BERNARDO
8

đầu ra

Thật

Hơn nữa, chúng ta có thể sử dụng regex để tìm một chuỗi giữa hai ký tự. Trong ví dụ tiếp theo, chúng tôi sẽ sử dụng mẫu biểu thức chính quy để tìm một chuỗi giữa các dấu ngoặc vuông

Thí dụ. Biểu thức chính quy để tìm tất cả các ký tự giữa hai ký tự đặc biệt

BERNARDO
9

đầu ra

sentence = "Jack and Jill went up the hill."

index1 = sentence.index["J",0]
print[index1]

index2 = sentence.index["J",1]
print[index2]
0

Regex bao gồm nhiều siêu ký tự. Bao gồm tất cả chúng nằm ngoài phạm vi của hướng dẫn này, nhưng đây là một số ví dụ khác từ các ví dụ trên

Thêm ký tự Regex

  • \  – Sử dụng để thoát một ký tự đặc biệt [ví dụ: ký tự []
  • – Ký tự đại diện [khớp với bất kỳ ký tự nào ngoại trừ ký tự xuống dòng]
  • + – So khớp nhiều lần xuất hiện
  • ?

Tách chuỗi bằng đối tượng Slice

Một đối tượng lát Python được sử dụng để phân tách một chuỗi, chẳng hạn như chuỗi hoặc danh sách. Đối tượng lát cho Python biết cách cắt chuỗi

Các đối tượng lát có ba tham số. bắt đầu, dừng lại và bước. Hai tham số đầu tiên cho Python biết nơi bắt đầu và kết thúc lát cắt, trong khi tham số bước mô tả mức tăng giữa mỗi bước

Với một đối tượng lát, chúng ta có thể nhận được một chuỗi con giữa các ký tự. Để tạo đối tượng slice, sử dụng hàm slice[]. Hàm này trả về một đối tượng lát mới có thể được áp dụng cho một chuỗi hoặc chuỗi khác

Thí dụ. Sử dụng Đối tượng Slice để lấy chuỗi con

sentence = "Jack and Jill went up the hill."

index1 = sentence.index["J",0]
print[index1]

index2 = sentence.index["J",1]
print[index2]
1

đầu ra

sentence = "Jack and Jill went up the hill."

index1 = sentence.index["J",0]
print[index1]

index2 = sentence.index["J",1]
print[index2]
2

Tóm lược

Hướng dẫn này đã khám phá một số kỹ thuật để tách chuỗi giữa các ký tự. Giải pháp đơn giản nhất cho nhiệm vụ này thường là ký hiệu lát cắt, nhưng điều này không phải lúc nào cũng đúng. Tùy thuộc vào nhu cầu của bạn, có thể cần phải sử dụng các phương pháp Python khác để đạt được mục tiêu của mình

Dưới đây là đánh giá nhanh về các chủ đề chúng tôi đề cập

  • Với hàm split[], chúng ta có thể chia chuỗi thành các chuỗi con.  
  • Nếu bạn cần tìm kiếm có mục tiêu cụ thể, hãy thử sử dụng cụm từ thông dụng.  
  • Slice Objects là một tùy chọn khác để cắt chuỗi
  • Ký hiệu lát cắt là một cách nhanh chóng để phân tách một chuỗi giữa các ký tự

Bạn có thể coi mỗi tùy chọn là một công cụ trong hộp công cụ của nhà phát triển Python. Hãy nhớ sử dụng công cụ thích hợp cho công việc và bạn sẽ đi đúng hướng

bài viết liên quan

Nếu bạn thấy hướng dẫn này hữu ích và muốn tìm hiểu thêm về lập trình Python, hãy xem các liên kết này từ Python cho người mới bắt đầu.  

  • Sử dụng Python ghi vào tệp để lưu tài liệu văn bản
  • Cách nối chuỗi trong Python với phép nối chuỗi

Có liên quan

Đào tạo Python được đề xuất

Khóa học. Python 3 cho người mới bắt đầu

Hơn 15 giờ nội dung video với hướng dẫn có hướng dẫn cho người mới bắt đầu. Tìm hiểu cách tạo các ứng dụng trong thế giới thực và nắm vững kiến ​​thức cơ bản

Chủ Đề