Regex trích xuất văn bản sau từ python

Để lấy danh sách tất cả các số trong Chuỗi, hãy sử dụng biểu thức chính quy '[0-9]+' với re. phương thức findall(). [0-9] đại diện cho một biểu thức chính quy để khớp với một chữ số trong chuỗi. [0-9]+ đại diện cho các chuỗi chữ số liên tục có độ dài bất kỳ

numbers = re.findall('[0-9]+', str)

trong đó str là chuỗi mà chúng ta cần tìm các số. lại. findall() trả về danh sách các chuỗi khớp với biểu thức chính quy

ví dụ 1. Lấy danh sách tất cả các số trong Chuỗi

Trong ví dụ sau, chúng ta sẽ lấy một chuỗi, We live at 9-162 Malibeu. My phone number is 666688888., và tìm tất cả các số, ['9', '162', '666688888'], có trong chuỗi

Chương trình Python

import re

str = 'We live at 9-162 Malibeu. My phone number is 666688888.'
#search using regex
x = re.findall('[0-9]+', str)
print(x)
Chạy

đầu ra

['9', '162', '666688888']

ví dụ 2. Lấy danh sách tất cả các chữ số liên tục trong Chuỗi

Trong ví dụ sau, chúng ta sẽ lấy một chuỗi, We four guys, live at 2nd street of Malibeu. I had a cash of $248 in my pocket. I got a ticket with serial number 88796451-52., và tìm tất cả các số, ['2', '248', '88796451', '52'], có trong chuỗi

Chương trình Python

import re

str = 'We four guys, live at 2nd street of Malibeu. I had a cash of $248 in my pocket. I got a ticket with serial number 88796451-52.'
#search using regex
x = re.findall('[0-9]+', str)
print(x)
Chạy

đầu ra

['2', '248', '88796451', '52']

Tóm lược

Trong hướng dẫn về Ví dụ Python này, chúng ta đã học cách lấy tất cả các số tạo thành một chuỗi dưới dạng danh sách, sử dụng Biểu thức chính quy Python, với sự trợ giúp của các chương trình ví dụ

Xử lý chuỗi khá dễ dàng trong Stata do có nhiều hàm chuỗi tích hợp sẵn. Trong số các hàm chuỗi này có ba hàm liên quan đến biểu thức chính quy, regexm để khớp, regexr để thay thế và regexs cho các biểu thức con. Chúng tôi sẽ trình bày một số ví dụ về cách sử dụng biểu thức chính quy để trích xuất và/hoặc thay thế một phần của biến chuỗi bằng ba hàm này. Ở cuối trang là phần giải thích về tất cả các toán tử biểu thức chính quy cũng như các hàm hoạt động với biểu thức chính quy


ví dụ

ví dụ 1. Một nhà nghiên cứu có địa chỉ dưới dạng một biến chuỗi và muốn tạo một biến mới chỉ chứa các mã zip

ví dụ 2. Ta có một biến chứa họ và tên theo thứ tự họ và tên. Ta muốn tạo một biến mới có họ và tên theo thứ tự họ và tên cách nhau bởi dấu phẩy

ví dụ 2. Ngày được nhập dưới dạng một biến chuỗi, trong một số trường hợp, năm được nhập dưới dạng giá trị có bốn chữ số (đây là giá trị mà Stata thường mong đợi thấy), nhưng trong các trường hợp khác, nó được nhập dưới dạng giá trị có hai chữ số. Chúng tôi muốn tạo một biến ngày ở định dạng số dựa trên biến chuỗi này. Nhiệm vụ này thực sự có thể dễ dàng được xử lý bằng các lệnh Stata thông thường, hãy xem trang Câu hỏi thường gặp của chúng tôi “Biến ngày tháng của tôi là một chuỗi, làm cách nào để biến nó thành biến ngày tháng mà Stata có thể nhận ra?” . Chúng tôi đã đưa ví dụ này vào đây với mục đích trình diễn, không phải vì biểu thức chính quy nhất thiết là cách tốt nhất để xử lý tình huống này

Trong những tình huống này, các biểu thức chính quy có thể được sử dụng để xác định các trường hợp trong đó một chuỗi chứa một tập hợp các giá trị (e. g. một từ cụ thể, một số theo sau bởi một từ, v.v. ) và trích xuất bộ giá trị đó từ toàn bộ chuỗi để sử dụng ở nơi khác


ví dụ 1. Trích xuất mã zip từ địa chỉ

Hãy bắt đầu với một số mục địa chỉ giả mạo

input str60 address
"4905 Lakeway Drive, College Station, Texas 77845 USA"
"673 Jasmine Street, Los Angeles, CA 90024"
"2376 First street, San Diego, CA 90126"
"6 West Central St, Tempe AZ 80068"
"1234 Main St. Cambridge, MA 01238-1234"
end

Để tìm mã zip, chúng tôi sẽ tìm một số có năm chữ số trong một địa chỉ. Lệnh gen (viết tắt của "generate") bên dưới yêu cầu Stata tạo một biến mới gọi là zip. Phần còn lại của lệnh hơi phức tạp, "if" được đánh giá trước, if(regexm(address, “[0-9][0-9][0-9][0-9][0-9] . Chúng tôi cho biết rằng chúng tôi muốn một số có năm chữ số bằng cách chỉ định “[0-9]” năm lần. Trừ khi được chỉ định khác bằng cách sử dụng *, + hoặc ? . Điều này có nghĩa là xâu năm biểu thức này lại với nhau sẽ cho phép chúng ta tìm một xâu có đúng năm chữ số. Lưu ý rằng 0-9 chỉ ra rằng biểu thức phải khớp với bất kỳ ký tự nào từ 0 đến 9 (i. e. 0, 1, 2, 3, 4, 5, 6, 7, 8 và 9 đều khớp nhau)

gen zip = regexs(0) if(regexm(address, "[0-9][0-9][0-9][0-9][0-9]"))

list

     +--------------------------------------------------------------+
     |                                              address     zip |
     |--------------------------------------------------------------|
  1. | 4905 Lakeway Drive, College Station, Texas 77845 USA   77845 |
  2. |            673 Jasmine Street, Los Angeles, CA 90024   90024 |
  3. |               2376 First street, San Diego, CA 90126   90126 |
  4. |                    6 West Central St, Tempe AZ 80068   80068 |
  5. |               1234 Main St. Cambridge, MA 01238-1234   01238 |
     +--------------------------------------------------------------+

Ví dụ 1, Biến thể Số 1

Trong ví dụ đơn giản của chúng tôi ở trên, không có địa chỉ nào có số đường gồm năm chữ số. Điều gì sẽ xảy ra nếu có những địa chỉ có số đường gồm năm chữ số?

clear
input str60 address
"4905 Lakeway Drive, College Station, Texas 77845"
"673 Jasmine Street, Los Angeles, CA 90024"
"2376 First street, San Diego, CA 90126"
"66666 West Central St, Tempe AZ 80068"
"12345 Main St. Cambridge, MA 01238"
end

gen zip = regexs(0) if(regexm(address, "[0-9][0-9][0-9][0-9][0-9]"))

list

     +----------------------------------------------------------+
     |                                          address     zip |
     |----------------------------------------------------------|
  1. | 4905 Lakeway Drive, College Station, Texas 77845   77845 |
  2. |        673 Jasmine Street, Los Angeles, CA 90024   90024 |
  3. |           2376 First street, San Diego, CA 90126   90126 |
  4. |            66666 West Central St, Tempe AZ 80068   66666 |
  5. |               12345 Main St. Cambridge, MA 01238   12345 |
     +----------------------------------------------------------+

Rõ ràng, điều này không hoạt động chính xác vì hai hàng cuối cùng của biến zip đã chọn số đường cho các địa chỉ này thay vì mã zip. Trong tập dữ liệu này, mã zip xuất hiện ở cuối chuỗi địa chỉ. Nếu chúng tôi cho rằng đây là trường hợp của tất cả các địa chỉ trong dữ liệu, thì biện pháp khắc phục sẽ thực sự đơn giản. Chúng tôi có thể chỉ định "[0-9][0-9][0-9][0-9][0-9]$" sẽ hướng dẫn Stata tìm một số có năm chữ số ở cuối chuỗi

________số 8_______

Ví dụ 1, Biến thể số 2

Đôi khi mã zip cũng bao gồm phần mở rộng gồm bốn chữ số và tên quốc gia cũng có thể xuất hiện ở cuối địa chỉ, chẳng hạn như ở một số địa chỉ được hiển thị bên dưới

clear
input str60 address
"4905 Lakeway Drive, College Station, Texas 77845 USA"
"673 Jasmine Street, Los Angeles, CA 90024"
"2376 First street, San Diego, CA 90126"
"66666 West Central St, Tempe AZ 80068"
"12345 Main St. Cambridge, MA 01238-1234"
"12345 Main St  Sommerville  MA 01239-2345"
"12345 Main St  Watertwon  MA 01239   USA"
end

Trong loại tình huống thực tế hơn này, mã trong các ví dụ trước sẽ không hoạt động chính xác vì có các ký tự thừa sau mã zip được trích xuất. Đây là cách chúng ta có thể làm điều đó bằng cách sử dụng một biểu thức chính quy phức tạp hơn

gen zip = regexs(1) if regexm(address, "([0-9][0-9][0-9][0-9][0-9])[-]*[0-9]*[ a-zA-Z]*$")
list
     +--------------------------------------------------------------+
     |                                              address     zip |
     |--------------------------------------------------------------|
  1. | 4905 Lakeway Drive, College Station, Texas 77845 USA   77845 |
  2. |            673 Jasmine Street, Los Angeles, CA 90024   90024 |
  3. |               2376 First street, San Diego, CA 90126   90126 |
  4. |                66666 West Central St, Tempe AZ 80068   80068 |
  5. |              12345 Main St. Cambridge, MA 01238-1234   01238 |
     |--------------------------------------------------------------|
  6. |            12345 Main St  Sommerville  MA 01239-2345   01239 |
  7. |             12345 Main St  Watertwon  MA 01239   USA   01239 |
     +--------------------------------------------------------------+

Những gì chúng tôi đã thêm vào trong biểu thức chính quy là phụ này. "[-]*[0-9]*[a-zA-Z]*". Có ba thành phần trong biểu thức chính quy này

  • [-]* – khớp với 0 hoặc nhiều dấu gạch ngang "-"
  • [0-9]* – khớp với 0 hoặc nhiều số
  • [ a-zA-Z]* – khớp với 0 hoặc nhiều khoảng trống hoặc chữ cái

Những bổ sung này cho phép chúng tôi khớp các trường hợp có các ký tự ở cuối sau mã zip và trích xuất mã zip một cách chính xác. Lưu ý rằng chúng tôi cũng đã sử dụng "regexs(1)" thay vì "regexs(0)" như chúng tôi đã làm trước đây, bởi vì chúng tôi hiện đang sử dụng các biểu thức con được biểu thị bằng cặp dấu ngoặc đơn trong "([0-9][0-9][ . Một chiến lược khác có thể hoạt động tốt hơn trong một số trường hợp là biểu thức chính quy

gen zip2 = regexs(1) if(regexm(address, ".*([0-9][0-9][0-9][0-9][0-9])"))

Trong ví dụ này, khoảng thời gian (i. e. “. ”) khớp với bất kỳ ký tự nào và chỉ dấu hoa thị (“*”) khớp với bất kỳ ký tự nào. Cùng với nhau, cả hai chỉ ra rằng số chúng ta đang tìm kiếm không nên xuất hiện ở đầu chuỗi, mà có thể xuất hiện ở bất kỳ đâu sau đó.


ví dụ 2. Trích xuất tên và họ và chuyển đổi thứ tự của họ

Chúng tôi có một biến chứa tên đầy đủ của một người theo thứ tự tên và sau đó là họ. Ta muốn tạo một biến mới cho họ và tên theo thứ tự họ và tên cách nhau bởi dấu phẩy. Để bắt đầu, hãy tạo một tập dữ liệu mẫu

clear
input str40 fullname
"John Adams"
"Adam Smiths"
"Mary Smiths"
"Charlie Wade"
end

Bây giờ chúng ta cần nắm bắt từ đầu tiên và từ thứ hai và hoán đổi chúng. Đây là biểu thức chính quy cho mục đích này. (([a-zA-Z]+)[ ]*([a-zA-Z]+))

Có ba phần trong biểu thức chính quy này

  • ([a-zA-Z]+) – biểu thức con bắt một chuỗi bao gồm các chữ cái, cả chữ thường và chữ hoa. Đây sẽ là tên đầu tiên
  • [ ]* – khớp với (các) khoảng trắng. Đây là khoảng cách giữa tên và họ
  • ([a-zA-Z]+) – biểu thức con bắt một chuỗi bao gồm các chữ cái. Đây sẽ là tên cuối cùng
gen zip = regexs(0) if(regexm(address, "[0-9][0-9][0-9][0-9][0-9]"))

list

     +--------------------------------------------------------------+
     |                                              address     zip |
     |--------------------------------------------------------------|
  1. | 4905 Lakeway Drive, College Station, Texas 77845 USA   77845 |
  2. |            673 Jasmine Street, Los Angeles, CA 90024   90024 |
  3. |               2376 First street, San Diego, CA 90126   90126 |
  4. |                    6 West Central St, Tempe AZ 80068   80068 |
  5. |               1234 Main St. Cambridge, MA 01238-1234   01238 |
     +--------------------------------------------------------------+
0

Điều này thực sự hoạt động. Hãy xem cách regex hoạt động trong trường hợp này. regex thực sự xác định một số phần, dựa trên toàn bộ biểu thức cũng như các biểu thức con. Đoạn mã sau sử dụng biểu thức chính quy để đặt từng thành phần này (biểu thức con) vào biến riêng của nó và sau đó hiển thị chúng

gen zip = regexs(0) if(regexm(address, "[0-9][0-9][0-9][0-9][0-9]"))

list

     +--------------------------------------------------------------+
     |                                              address     zip |
     |--------------------------------------------------------------|
  1. | 4905 Lakeway Drive, College Station, Texas 77845 USA   77845 |
  2. |            673 Jasmine Street, Los Angeles, CA 90024   90024 |
  3. |               2376 First street, San Diego, CA 90126   90126 |
  4. |                    6 West Central St, Tempe AZ 80068   80068 |
  5. |               1234 Main St. Cambridge, MA 01238-1234   01238 |
     +--------------------------------------------------------------+
1

ví dụ 3. Giá trị hai và bốn chữ số cho năm

Trong ví dụ này, chúng tôi có ngày được nhập dưới dạng biến chuỗi. Stata có thể xử lý việc này bằng cách sử dụng các lệnh tiêu chuẩn (xem "Biến ngày của tôi là một chuỗi, làm cách nào để biến nó thành một biến ngày mà Stata có thể nhận ra?"), chúng tôi đang sử dụng điều này làm ví dụ về những gì bạn có thể làm với các biểu thức chính quy. Mục tiêu của quy trình này là tạo ra một biến chuỗi với năm có bốn chữ số thích hợp cho mọi trường hợp, sau đó Stata có thể dễ dàng chuyển đổi thành một ngày tháng. Để làm điều này, chúng tôi sẽ bắt đầu bằng cách tách từng thành phần của ngày (ngày, tháng và năm có hai hoặc bốn chữ số) thành một biến riêng biệt, sau đó chúng tôi sẽ gán năm có bốn chữ số chính xác cho các trường hợp hiện chỉ có

Đầu tiên, nhập ngày

gen zip = regexs(0) if(regexm(address, "[0-9][0-9][0-9][0-9][0-9]"))

list

     +--------------------------------------------------------------+
     |                                              address     zip |
     |--------------------------------------------------------------|
  1. | 4905 Lakeway Drive, College Station, Texas 77845 USA   77845 |
  2. |            673 Jasmine Street, Los Angeles, CA 90024   90024 |
  3. |               2376 First street, San Diego, CA 90126   90126 |
  4. |                    6 West Central St, Tempe AZ 80068   80068 |
  5. |               1234 Main St. Cambridge, MA 01238-1234   01238 |
     +--------------------------------------------------------------+
2

Tiếp theo, chúng tôi muốn xác định ngày trong tháng và đặt nó vào một biến có tên là ngày. Để làm điều này, chúng tôi hướng dẫn Stata tìm ngày bằng cách nhìn vào phần đầu của chuỗi (i. e. ngày), cho một hoặc nhiều giá trị từ 0-9. (Nói cách khác, hãy tìm một số ở đầu dòng, vì chúng ta biết dãy số đầu tiên là ngày. ) Tạo một ngày biến mới và đặt nó bằng giá trị đó

gen zip = regexs(0) if(regexm(address, "[0-9][0-9][0-9][0-9][0-9]"))

list

     +--------------------------------------------------------------+
     |                                              address     zip |
     |--------------------------------------------------------------|
  1. | 4905 Lakeway Drive, College Station, Texas 77845 USA   77845 |
  2. |            673 Jasmine Street, Los Angeles, CA 90024   90024 |
  3. |               2376 First street, San Diego, CA 90126   90126 |
  4. |                    6 West Central St, Tempe AZ 80068   80068 |
  5. |               1234 Main St. Cambridge, MA 01238-1234   01238 |
     +--------------------------------------------------------------+
3

Dòng cú pháp dưới đây tìm tháng bằng cách tìm một hoặc nhiều chữ cái cùng nhau trong chuỗi. Sau đó, tạo biến tháng và đặt nó bằng tháng được xác định trong chuỗi

gen zip = regexs(0) if(regexm(address, "[0-9][0-9][0-9][0-9][0-9]"))

list

     +--------------------------------------------------------------+
     |                                              address     zip |
     |--------------------------------------------------------------|
  1. | 4905 Lakeway Drive, College Station, Texas 77845 USA   77845 |
  2. |            673 Jasmine Street, Los Angeles, CA 90024   90024 |
  3. |               2376 First street, San Diego, CA 90126   90126 |
  4. |                    6 West Central St, Tempe AZ 80068   80068 |
  5. |               1234 Main St. Cambridge, MA 01238-1234   01238 |
     +--------------------------------------------------------------+
4

Năm là nơi mọi thứ trở nên phức tạp hơn. Lưu ý rằng các giá trị để chỉ định thế kỷ dựa trên kiến ​​thức của tôi về “dữ liệu. ” Trước hết, chúng tôi trích xuất tất cả các chữ số cho năm. Chúng tôi sử dụng toán tử "$" để chỉ ra rằng tìm kiếm từ cuối chuỗi. Sau đó, chúng tôi biến biến chuỗi thành biến số bằng cách sử dụng hàm "real" của Stata. Hành động tiếp theo liên quan đến việc xử lý các năm có hai chữ số bắt đầu bằng "0". Điều này tương ứng với những năm gần đây trong thế kỷ XXI. Để biến những năm này thành năm có bốn chữ số, chúng ta nối (sử dụng dấu +) chuỗi được xác định (năm có hai chữ số) với chuỗi "20". Tiếp theo, chúng ta sẽ tìm các năm có hai chữ số 10-99 và nối các chuỗi đó với chuỗi "19". Cuối cùng, chúng tôi tạo biến date2 là ngày của chúng tôi chỉ chứa năm có bốn chữ số. (Chúng ta cũng có thể sử dụng ba biến ngày, tháng, năm để tạo biến ngày tháng bằng các hàm ngày của Stata. )

gen zip = regexs(0) if(regexm(address, "[0-9][0-9][0-9][0-9][0-9]"))

list

     +--------------------------------------------------------------+
     |                                              address     zip |
     |--------------------------------------------------------------|
  1. | 4905 Lakeway Drive, College Station, Texas 77845 USA   77845 |
  2. |            673 Jasmine Street, Los Angeles, CA 90024   90024 |
  3. |               2376 First street, San Diego, CA 90126   90126 |
  4. |                    6 West Central St, Tempe AZ 80068   80068 |
  5. |               1234 Main St. Cambridge, MA 01238-1234   01238 |
     +--------------------------------------------------------------+
5

Biểu thức chính quy

Nói chung, các biểu thức chính quy là một cách tìm kiếm và trong một số trường hợp thay thế sự xuất hiện của một mẫu trong một chuỗi dựa trên một bộ quy tắc. Các quy tắc này được xác định bằng cách sử dụng một tập hợp các toán tử. Bảng sau đây hiển thị tất cả các toán tử mà Stata chấp nhận và giải thích từng toán tử. Lưu ý rằng trong Stata, các biểu thức chính quy sẽ luôn nằm trong dấu ngoặc kép

[ ]Dấu ngoặc vuông cho biết một trong các ký tự bên trong dấu ngoặc vuông phải khớp với nhau. Ví dụ: nếu tôi muốn tìm kiếm một chữ cái giữa f và m,  tôi sẽ nhập "[f-m]"dải a-zA chỉ định rằng bất kỳ giá trị nào trong dải đó đều được chấp nhận. Điều này phân biệt chữ hoa chữ thường, vì vậy a-z không giống với A-Z, nếu một trong hai trường hợp có thể được tính là khớp, hãy bao gồm cả a-zA-Z. Các giá trị số cũng được chấp nhận dưới dạng phạm vi (e. g. 0-9). Dấu chấm khớp với bất kỳ ký tự nào. Cho phép bạn khớp các ký tự thường là toán tử biểu thức chính quy. Ví dụ: nếu bạn muốn so khớp  một "[", bạn sẽ nhập [ thay vì chỉ một [. * Khớp không hoặc nhiều ký tự trong biểu thức trước. Ví dụ: nếu tôi muốn khớp một số được tạo thành từ một hoặc nhiều chữ số nếu có một số, nhưng vẫn muốn biểu thị khớp nếu phần còn lại của biểu thức khớp, tôi có thể chỉ định [0-9]*+Match one hoặc . Ví dụ: nếu tôi muốn khớp một từ chứa bất kỳ tổ hợp chữ cái nào, tôi sẽ chỉ định [a-zA-Z]+?Match một trong hai số không hoặc một trong các biểu thức trước đó. ^Khi nó xuất hiện ở đầu một biểu thức, dấu "^" cho biết rằng biểu thức sau sẽ xuất hiện ở đầu chuỗi. $Khi nó xuất hiện ở cuối một biểu thức, "$" cho biết rằng biểu thức trước đó sẽ xuất hiện ở cuối chuỗi. Ví dụ: nếu tôi muốn so khớp một số xuất hiện cuối cùng ở cuối chuỗi, tôi sẽ chỉ định "[0-9]+$". Toán tử logic hoặc, cho biết rằng biểu thức đứng trước nó hoặc theo sau nó đủ điều kiện là một đối sánh. ( ) Tạo một biểu thức con trong một biểu thức lớn hơn. Hữu ích với toán tử "hoặc" (i. e. . ) và khi trích xuất và thay thế các giá trị. Ví dụ: nếu tôi muốn trích xuất một giá trị số mà tôi biết ngay sau một từ hoặc tập hợp các chữ cái, tôi có thể sử dụng cụm từ thông dụng “[a-zA-Z]+([0-9]+)" điều này phù hợp . Xử lý các chuỗi con được thảo luận chi tiết hơn bên dưới

Các biểu thức này có thể được kết hợp để tìm kiếm nhiều loại chuỗi khác nhau

Như đã đề cập ở trên, có ba loại hàm có thể được định dạng trước bằng các biểu thức chính quy trong Stata (nếu bạn sáng tạo, bạn có thể thực hiện bất kỳ số việc nào khác bằng cách sử dụng các hàm này, nhưng các công cụ cơ bản là các hàm Stata tích hợp sẵn). Stata có các lệnh riêng biệt cho từng loại trong ba loại hành động mà biểu thức chính quy có thể thực hiện

  • regexm – được sử dụng để tìm các chuỗi phù hợp, đánh giá thành một nếu có kết quả khớp và 0 nếu không
  • biểu thức chính quy – được sử dụng để trả về chuỗi con thứ n trong một biểu thức khớp với biểu thức chính quy (do đó, biểu thức chính quy phải luôn được chạy trước biểu thức chính quy, lưu ý rằng "nếu" được đánh giá trước mặc dù nó xuất hiện sau trên dòng cú pháp)
  • regexr – được sử dụng để thay thế một biểu thức phù hợp bằng một biểu thức khác

Mỗi trong số này có một cú pháp hơi khác nhau. Dòng bên dưới hiển thị cú pháp cho biểu thức chính quy, nghĩa là hàm khớp với biểu thức chính quy của bạn, trong đó chuỗi có thể là chuỗi bạn tự nhập, chuỗi từ macro hoặc phổ biến nhất là tên của biến. Biểu thức chính quy là biểu thức chính quy cho chuỗi mà bạn muốn tìm, lưu ý rằng nó phải nằm trong dấu ngoặc kép

gen zip = regexs(0) if(regexm(address, "[0-9][0-9][0-9][0-9][0-9]"))

list

     +--------------------------------------------------------------+
     |                                              address     zip |
     |--------------------------------------------------------------|
  1. | 4905 Lakeway Drive, College Station, Texas 77845 USA   77845 |
  2. |            673 Jasmine Street, Los Angeles, CA 90024   90024 |
  3. |               2376 First street, San Diego, CA 90126   90126 |
  4. |                    6 West Central St, Tempe AZ 80068   80068 |
  5. |               1234 Main St. Cambridge, MA 01238-1234   01238 |
     +--------------------------------------------------------------+
6

Đối với biểu thức chính quy, nghĩa là để gọi lại tất cả hoặc một phần của chuỗi, cú pháp là

gen zip = regexs(0) if(regexm(address, "[0-9][0-9][0-9][0-9][0-9]"))

list

     +--------------------------------------------------------------+
     |                                              address     zip |
     |--------------------------------------------------------------|
  1. | 4905 Lakeway Drive, College Station, Texas 77845 USA   77845 |
  2. |            673 Jasmine Street, Los Angeles, CA 90024   90024 |
  3. |               2376 First street, San Diego, CA 90126   90126 |
  4. |                    6 West Central St, Tempe AZ 80068   80068 |
  5. |               1234 Main St. Cambridge, MA 01238-1234   01238 |
     +--------------------------------------------------------------+
7

Trong đó n là số được gán cho chuỗi con bạn muốn trích xuất. Các chuỗi con thực sự được chia khi bạn chạy regexm. Toàn bộ chuỗi con được trả về bằng 0 và mỗi chuỗi con được đánh số liên tục từ 1 đến n. Ví dụ: regexm(“907-789-3939”, “([0-9]*)-([0-9]*)-([0-9]*)”) trả về như sau

Biểu thức con #String Returned0907-789-39391907278933939

Lưu ý rằng trong các biểu thức con 1, 2 và 3, các dấu gạch ngang bị bỏ đi vì chúng không được bao gồm trong dấu ngoặc đơn đánh dấu các biểu thức con

Bạn có thể xem lại cách thức hoạt động của nó bằng cú pháp sau, cú pháp này sử dụng lệnh display để chạy hàm

gen zip = regexs(0) if(regexm(address, "[0-9][0-9][0-9][0-9][0-9]"))

list

     +--------------------------------------------------------------+
     |                                              address     zip |
     |--------------------------------------------------------------|
  1. | 4905 Lakeway Drive, College Station, Texas 77845 USA   77845 |
  2. |            673 Jasmine Street, Los Angeles, CA 90024   90024 |
  3. |               2376 First street, San Diego, CA 90126   90126 |
  4. |                    6 West Central St, Tempe AZ 80068   80068 |
  5. |               1234 Main St. Cambridge, MA 01238-1234   01238 |
     +--------------------------------------------------------------+
8

Vì chúng là các hàm nên các lệnh regex hoạt động bên trong các lệnh khác (e. g. tạo), nhưng không thể được sử dụng riêng (i. e. bạn không thể bắt đầu một lệnh trong Stata bằng regexm(…)

Làm cách nào để trích xuất các từ sau một từ cụ thể từ chuỗi trong Python?

Chúng ta có thể sử dụng các biểu thức chính quy trong python để trích xuất các từ cụ thể từ một chuỗi. Chúng ta có thể sử dụng phương thức search() từ mô-đun re để tìm lần xuất hiện đầu tiên của từ và sau đó chúng ta có thể lấy từ đó bằng cách cắt .

Làm cách nào để trích xuất văn bản bằng regex Python?

Các bước so khớp biểu thức chính quy .
Nhập mô-đun regex với nhập lại
Tạo một đối tượng Regex với re. chức năng biên dịch(). .
Truyền chuỗi bạn muốn tìm kiếm vào phương thức search() của đối tượng Regex. .
Gọi phương thức group() của đối tượng Match để trả về một chuỗi văn bản khớp thực tế