Hướng dẫn how to extract a string between two symbols in python? - cách trích xuất một chuỗi giữa hai ký hiệu trong python?

from timeit import timeit
from re import search, DOTALL


def partition_find(string, start, end):
    return string.partition(start)[2].rpartition(end)[0]


def re_find(string, start, end):
    # applying re.escape to start and end would be safer
    return search(start + '(.*)' + end, string, DOTALL).group(1)


def index_find(string, start, end):
    return string[string.find(start) + len(start):string.rfind(end)]


# The wikitext of "Alan Turing law" article form English Wikipeida
# https://en.wikipedia.org/w/index.php?title=Alan_Turing_law&action=edit&oldid=763725886
string = """..."""
start = '==Proposals=='
end = '==Rival bills=='

assert index_find(string, start, end) \
       == partition_find(string, start, end) \
       == re_find(string, start, end)

print('index_find', timeit(
    'index_find(string, start, end)',
    globals=globals(),
    number=100_000,
))

print('partition_find', timeit(
    'partition_find(string, start, end)',
    globals=globals(),
    number=100_000,
))

print('re_find', timeit(
    're_find(string, start, end)',
    globals=globals(),
    number=100_000,
))

Result:

index_find 0.35047444528454114
partition_find 0.5327825636197754
re_find 7.552149639286381

index_find 0.35047444528454114
partition_find 0.5327825636197754
re_find 7.552149639286381
0 chậm hơn gần 20 lần so với
index_find 0.35047444528454114
partition_find 0.5327825636197754
re_find 7.552149639286381
1 trong ví dụ này.

Trong bài viết này, chúng tôi sẽ học cách trích xuất một chuỗi con giữa hai điểm đánh dấu trong một chuỗi bằng ngôn ngữ lập trình Python. Nhưng trước đó, chúng ta nên biết một nền tảng trong ngôn ngữ lập trình Python là gì?

Một chuỗi con là một chuỗi các ký tự là một phần của chuỗi thường được tạo bằng các phương thức như cắt hoặc bằng phương thức Split (). Bây giờ, hãy để Lừa tìm hiểu về các phương pháp mà qua đó chúng ta có thể trích xuất chuỗi con đã cho giữa hai điểm đánh dấu.

Mục lục

  • Trích xuất chuỗi con giữa hai điểm đánh dấu bằng regex
  • Trích xuất chuỗi con giữa hai điểm đánh dấu bằng Find () và Slice ()
  • Trích xuất chuỗi con giữa hai điểm đánh dấu bằng phương thức Split ()
  • Trích xuất chuỗi con giữa hai điểm đánh dấu bằng phương thức phân vùng ():
  • Bản tóm tắt

Phương pháp đầu tiên chúng ta sẽ sử dụng để trích xuất một chuỗi con nhất định giữa hai điểm đánh dấu là bằng cách sử dụng phương thức tìm kiếm () của mô -đun lại. RE là viết tắt của biểu thức chính quy đi kèm với ngôn ngữ lập trình Python.search() method of re module. The re stands for Regular Expression which comes bundled with the Python Programming Language.

Các phương thức RE.Search (mẫu) trả về chuỗi được tìm thấy phù hợp với mẫu đã cho. Nó dừng ngay khi nó định vị chuỗi toán học và trả về chuỗi. Nếu không tìm thấy trận đấu nào thì t trả về không.re.search(pattern) methods returns the string found which matches the given pattern. It stops as soon as it locates the mathcing string and returns the string. If no match s found then t returns None.

Quảng cáo

Hãy xem một ví dụ,

import re

sampleStr = 'ilearncodingfrom;thispointer.com/articles'

try :
    # here ; and / are our two markers 
    # in which string can be found. 
    marker1 = ';'
    marker2 = '/'
    regexPattern = marker1 + '(.+?)' + marker2
    str_found = re.search(regexPattern, sampleStr).group(1)
except AttributeError:
    # Attribute error is expected if string 
    # is not found between given markers
    str_found = 'Nothing found between two markers'

print(str_found)

Đầu ra:

thispointer.com

Vì vậy, trong mã và đầu ra ở trên, bạn có thể thấy rằng bằng cách sử dụng phương thức RE.Search (), chúng tôi đã tìm thấy thành công chuỗi con giữa hai điểm đánh dấu. Chúng tôi cần tìm chuỗi giữa hai điểm đánh dấu (; và /) trong Lấy mẫu biến. Ngoài ra, chúng tôi đang mong đợi AttributionError nếu không có gì được tìm thấy giữa hai điểm đánh dấu đã cho. Vì vậy, nếu không tìm thấy gì giữa hai điểm đánh dấu đã cho (; và /) sau đó thay vì đưa ra một thuộc tính, nó sẽ trả về một thông báo không tìm thấy gì giữa hai điểm đánh dấu.AttributeError if nothing is found between the given two markers. So, if find nothing between the given two markers(; and /) then instead of giving an AttributeError , it will return a message nothing found between two markers.

Trích xuất chuỗi con giữa hai điểm đánh dấu bằng Find () và Slice ()

Trích xuất chuỗi con giữa hai điểm đánh dấu bằng phương thức Split ()
find() method will be used to find the string between two markers. It returns -1 if found nothing. Then we will use slice() method to slice the substring in between given two markers. Lets see an example :

sampleStr = 'ilearncodingfrom;thispointer.com/articles'

# find() method will search the 
# given marker and stores its index 
mk1 = sampleStr.find(';') + 1

# find() method will search the given 
# marker and sotres its index
mk2 = sampleStr.find('/', mk1)

# using slicing substring will be 
# fetched in between markers.
subString = sampleStr[ mk1 : mk2 ]

print(subString)

Đầu ra:

thispointer.com

Vì vậy, trong mã và đầu ra ở trên, bạn có thể thấy rằng bằng cách sử dụng phương thức RE.Search (), chúng tôi đã tìm thấy thành công chuỗi con giữa hai điểm đánh dấu. Chúng tôi cần tìm chuỗi giữa hai điểm đánh dấu (; và /) trong Lấy mẫu biến. Ngoài ra, chúng tôi đang mong đợi AttributionError nếu không có gì được tìm thấy giữa hai điểm đánh dấu đã cho. Vì vậy, nếu không tìm thấy gì giữa hai điểm đánh dấu đã cho (; và /) sau đó thay vì đưa ra một thuộc tính, nó sẽ trả về một thông báo không tìm thấy gì giữa hai điểm đánh dấu.

Để trích xuất chuỗi con giữa hai điểm đánh dấu, chúng tôi sẽ sử dụng kết hợp phương thức Find () và phương pháp cắt ngôn ngữ lập trình Python. Phương thức thefind () sẽ được sử dụng để tìm chuỗi giữa hai điểm đánh dấu. Nó trả về -1 nếu không tìm thấy. Sau đó, chúng tôi sẽ sử dụng phương thức Slice () để cắt phần phụ ở giữa hai điểm đánh dấu. Hãy xem một ví dụ:

Trong mã và đầu ra của phương pháp 2, bạn có thể thấy rằng một kết hợp của phương thức Slice () và các phương thức find () đã được sử dụng để trích xuất chuỗi con giữa hai điểm đánh dấu. Chỉ số các điểm đánh dấu đã được sotred trong var mk1 và mk2 bằng phương thức find (). Sau đó sử dụng cắt lát, chuỗi con đã được tìm nạp và in.
separator : separator used to split the string. If given nothing is provided, then space is the default separator.
maxsplit : a number, which specifies the maximum parts in which the string needs to be splitted. Default value is -1 which specifies there is no limit.

Phương pháp tiếp theo mà chúng ta sẽ sử dụng là phương pháp phân chia ngôn ngữ lập trình python, để trích xuất một chuỗi con nhất định giữa hai điểm đánh dấu. Phương thức Split () trong Python chia chuỗi đã cho từ một dấu phân cách đã cho và trả về một danh sách các chuỗi con được chia.

Nó nhận được hai tham số: - Dấu phân cách: Dấu tách được sử dụng để phân chia chuỗi. Nếu không được cung cấp, thì không gian là bộ phân cách mặc định. Max MaxSplit: một số, chỉ định các phần tối đa trong đó chuỗi cần được chia. Giá trị mặc định là -1 chỉ định không có giới hạn.

sampleStr = 'ilearncodingfrom;thispointer.com/articles'

# here ; and / are our two markers 
# in which string can be found. 
subStr = sampleStr.split(';')[1].split('/')[0]

print(subStr)

Đầu ra:

thispointer.com

Vì vậy, trong mã và đầu ra ở trên, bạn có thể thấy rằng bằng cách sử dụng phương thức RE.Search (), chúng tôi đã tìm thấy thành công chuỗi con giữa hai điểm đánh dấu. Chúng tôi cần tìm chuỗi giữa hai điểm đánh dấu (; và /) trong Lấy mẫu biến. Ngoài ra, chúng tôi đang mong đợi AttributionError nếu không có gì được tìm thấy giữa hai điểm đánh dấu đã cho. Vì vậy, nếu không tìm thấy gì giữa hai điểm đánh dấu đã cho (; và /) sau đó thay vì đưa ra một thuộc tính, nó sẽ trả về một thông báo không tìm thấy gì giữa hai điểm đánh dấu.

Để trích xuất chuỗi con giữa hai điểm đánh dấu, chúng tôi sẽ sử dụng kết hợp phương thức Find () và phương pháp cắt ngôn ngữ lập trình Python. Phương thức thefind () sẽ được sử dụng để tìm chuỗi giữa hai điểm đánh dấu. Nó trả về -1 nếu không tìm thấy. Sau đó, chúng tôi sẽ sử dụng phương thức Slice () để cắt phần phụ ở giữa hai điểm đánh dấu. Hãy xem một ví dụ:

  • Trong mã và đầu ra của phương pháp 2, bạn có thể thấy rằng một kết hợp của phương thức Slice () và các phương thức find () đã được sử dụng để trích xuất chuỗi con giữa hai điểm đánh dấu. Chỉ số các điểm đánh dấu đã được sotred trong var mk1 và mk2 bằng phương thức find (). Sau đó sử dụng cắt lát, chuỗi con đã được tìm nạp và in. : string before the given separator.
  • Phương pháp tiếp theo mà chúng ta sẽ sử dụng là phương pháp phân chia ngôn ngữ lập trình python, để trích xuất một chuỗi con nhất định giữa hai điểm đánh dấu. Phương thức Split () trong Python chia chuỗi đã cho từ một dấu phân cách đã cho và trả về một danh sách các chuỗi con được chia. : separator
  • Nó nhận được hai tham số: - Dấu phân cách: Dấu tách được sử dụng để phân chia chuỗi. Nếu không được cung cấp, thì không gian là bộ phân cách mặc định. Max MaxSplit: một số, chỉ định các phần tối đa trong đó chuỗi cần được chia. Giá trị mặc định là -1 chỉ định không có giới hạn. : string after the given separator.

Hãy xem một ví dụ về phương pháp này:

THÍ DỤ :

Nó nhận được hai tham số: - Dấu phân cách: Dấu tách được sử dụng để phân chia chuỗi. Nếu không được cung cấp, thì không gian là bộ phân cách mặc định. Max MaxSplit: một số, chỉ định các phần tối đa trong đó chuỗi cần được chia. Giá trị mặc định là -1 chỉ định không có giới hạn.

sampleStr = 'ilearncodingfrom;thispointer.com/articles'

before, mk1, after = sampleStr.partition(";")
subStr, mk2, after = after.partition("/")

print(subStr)

Đầu ra:

thispointer.com

Vì vậy, trong mã và đầu ra ở trên, bạn có thể thấy rằng bằng cách sử dụng phương thức RE.Search (), chúng tôi đã tìm thấy thành công chuỗi con giữa hai điểm đánh dấu. Chúng tôi cần tìm chuỗi giữa hai điểm đánh dấu (; và /) trong Lấy mẫu biến. Ngoài ra, chúng tôi đang mong đợi AttributionError nếu không có gì được tìm thấy giữa hai điểm đánh dấu đã cho. Vì vậy, nếu không tìm thấy gì giữa hai điểm đánh dấu đã cho (; và /) sau đó thay vì đưa ra một thuộc tính, nó sẽ trả về một thông báo không tìm thấy gì giữa hai điểm đánh dấu.
irst we partioned the string based on first marker. It splitted the string into three parts i.e. substring before first market, the first marker and the substring after the first marker. We picked the last one i.e. the substring after the first marker. Then we partioned that based on second marker and picked the first entry from returned tuple. This first entry denotes the sbstring before second marker. So as a result we got our substring between two given markers.

Bản tóm tắt

Trong bài viết này, chúng tôi đã tìm hiểu về chất nền và điểm đánh dấu.Sau đó, chúng tôi cũng đã thảo luận về bốn phương pháp khác nhau mà qua đó chúng tôi có thể trích xuất chuỗi con giữa hai điểm đánh dấu.Phương pháp 1 và Phương pháp 3 có thể rất hữu ích vì Phương pháp 1 có xử lý lỗi tốt hơn.Trong khi đó, Phương pháp 3 có cú pháp ngắn hơn và dễ hiểu hơn.Nếu không, tất cả các phương pháp trên đều rất hữu ích.Cố gắng tìm hiểu tất cả các phương pháp ở trên và chạy các mã này trên máy của bạn.Chúng tôi đã sử dụng Python 3.10.1 để viết mã ví dụ.Để kiểm tra phiên bản của bạn, hãy viết PythonTHERversion trong thiết bị đầu cuối của bạn.python –version in your terminal.