您好,我是正則運算式的新手,我需要將正則運算式應用于我們的郵政編碼字串,這是我們從連接熊貓列的行中獲得的
例如 zip 是列的標題
zip
you have some thing
70456
90876
78905
我們將字串 zip you have some thing 70456 90876 78905作為單個文字字串,它應該由正則運算式匹配,該正則運算式具有一些字符,后跟一個或多個由空格分隔的 5 位數字所以我寫了一個簡單'.*zip.*(\d{5}|\s)*' 的 zip 正則運算式,后跟任意數量的 5 位字符,但它給出a match(re.fullmatch) zip 123456后跟 6 位代碼的 zip
出于這個原因,我想在正則運算式中使用前瞻斷言,但我不知道如何準確地使用它而不給出任何匹配,我也用 re.search 使用后瞻斷言,但它似乎也失敗了,可以有人嗎給出一個包含單詞 zip 的正則運算式,最后只有 5 位字符可能是 nan
這是我寫的代碼
re.match('(?=zip)(\d{5}|\s)*','zip 123456')
<re.Match object; span=(0, 0), match=''>
re.search('(?<=zip)(\d{5}|\s)*','zip 123456')
<re.Match object; span=(3, 9), match=' 12345'>
有人可以告訴我如何為 if撰寫正則運算式。壓縮。后跟只有 5 位數字的數字給出匹配 else 無
re.match('(?=zip)(\d{5}|\s)*','zip 123456')
re.search('(?<=zip)(\d{5}|\s)*','zip 123456')
這些是我嘗試過的代碼我需要一個正則運算式,其中包含任何包含 zip 的字母數字字符,后跟一個 5 位數字代碼
uj5u.com熱心網友回復:
您可以使用
re.search(r'\bzip\b\D*\d{5}(?:\s \d{5})*\b', text)
請參閱正則運算式演示。如果您還想捕獲 ZIP,可以使用捕獲組:
re.search(r'\bzip\b\D*(\d{5}(?:\s \d{5})*)\b', text)
請參閱此正則運算式演示。
詳情:
\b- 單詞邊界zip- 一個zip字串\b- 單詞邊界\D*- 盡可能多的零個或多個數字以外的字符\d{5}- 五位數(?:\s \d{5})*- 零個或多個一個或多個空格的序列,然后是五個數字\b- 單詞邊界
uj5u.com熱心網友回復:
我建議使用 word-boundary ( \b) 如下
import re
t1 = 'zip 1234' # less than 5, should not match
t2 = 'zip 12345' # should match
t3 = 'zip 123456' # more than 5, should not match
pattern = r'zip\s\d{5}\b'
print(re.search(pattern, t1)) # None
print(re.search(pattern, t2)) # <re.Match object; span=(0, 9), match='zip 12345'>
print(re.search(pattern, t3)) # None
\b零長度斷言對于確保您擁有完整的單詞而不僅僅是部分很有用。有關操作的詳細資訊,請參閱re檔案\b。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/522311.html
