cuốn sách gpt4 ai đã làm

biểu thức chính quy python nhìn về phía trước tích cực + tiêu cực

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 17:16:59 29 4
mua khóa gpt4 Nike

Regex này sẽ nhận được 456. Câu hỏi của tôi là tại sao nó không thể là 234 trên 1-234-56? 56 có đủ điều kiện (?!\d)) mẫu vì nó không phải là một số duy nhất. (?!\d)) Điểm bắt đầu tìm kiếm ở đâu?

import re
mẫu = re.compile(r'\d{1,3}(?=(\d{3})+(?!\d))')
a = sample.findall("Số là: 123456") ;

Thêm dấu phân cách bằng dấu phẩy ở giai đoạn đầu tiên, chẳng hạn như 123.456.

a = sample.findall("Số là: 123456") ;
kết quả = mẫu.finditer('123456')
cho kết quả trong kết quả:
in (result.start(), result.end(), result)

câu trả lời hay nhất

Câu hỏi của tôi là tại sao KHÔNG THỂ 234 from 1-234-56?

Điều này là không thể bởi vì (?=(\d{3})+(?!\d)) Một chuỗi gồm 3 chữ số phải xuất hiện sau chuỗi 1-3 chữ số. 56(Nhóm số cuối cùng trong kịch bản tưởng tượng của bạn) là nhóm số có 2 chữ số. Vì các bộ định lượng có thể lười biếng hoặc tham lam nên bạn không thể kết hợp các số có một, hai và ba chữ số với \d{1,3} cuộc thi đấu. bắt đầu từ 234 获取 123456 , bạn cần một biểu thức chính quy tùy chỉnh cho nó: \B\d{3} , (?<=1)\d{3} 甚至 \d{3}(?=\d{2}(?!\d)) .

Làm 56 phù hợp với (?!\d)) điểm bắt đầu mà (?!\d)) sẽ tìm kiếm ở đâu?

Không, đó là một cái nhìn tiêu cực, nó không khớp, nó chỉ kiểm tra xem có chữ số nào sau vị trí hiện tại trong chuỗi đầu vào hay không. Nếu có số thì khớp không thành công (không tìm thấy kết quả và trả về kết quả).

Ghi chú thêm về lookahead: Nó nằm ở (\d{3})+ sau mẫu con, do đó công cụ biểu thức chính quy bắt đầu tìm kiếm số sau 3 chữ số cuối của mảng và nếu tìm thấy số đó thì kết quả khớp không thành công (vì đó là một cái nhìn tiêu cực). tóm lại,(?!\d) là ranh giới kết thúc/cuối của các số trong biểu thức chính quy này.

Phân đoạn chi tiết hơn:

  • \d{1,3} - Chuỗi từ 1 đến 3 chữ số, càng nhiều càng tốt (sử dụng bộ lượng hóa tham lam)
  • (?=(\d{3})+(?!\d)) - Nhìn về phía trước ( (?=...) ), một chuỗi gồm 1-3 chữ số để kiểm tra xem kết quả khớp trước đó có
    • (\d{3})+ - 1 hoặc nhiều hơn ( + ) dãy có đúng 3 chữ số...
    • (?!\d) - không có số theo sau.

Lookahead không khớp, không tiêu tốn ký tự, nhưng bạn vẫn có thểchiếm lấynội dung trong đó. Khi thực hiện tra cứu, chỉ số biểu thức chính quy giống với ký tự trước đó. Vượt qua biểu thức chính quy và đầu vào của bạn, bạn có thể chuyển đổi 123\d{1,3} Ghép sao cho bạn có được dãy 3 chữ số ( 456 ). Nhưng 456 Nhìn về phía trướcchiếm lấy,Và tìm lại Chỉ văn bản đã chụp được trả về nếu nhóm chụp được đặt.

Để thêm dấu phẩy làm ký hiệu nhóm số, hãy sử dụng

rx = r'\d(?=(?:\d{3})+(?!\d))'

Nhìn thấy Bản demo IDEONE

Về biểu thức chính quy của python nhìn về phía trước tích cực + tiêu cực, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/33580468/

29 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress