[英]How to exclude some characters from the text matched group?
我將匹配兩種情況:123456-78-9 或 123456789。我的目標是從任何一種情況中檢索 123456789,即從第一種情況中排除“-”,無需提及第二種情況非常簡單.
我嘗試使用像r"\b(\d+(?:-)?\d+(?:-)?\d)\b"
這樣的正則表達式,但它仍然給我 '123456-78-9' .
我應該使用什么正確的正則表達式? 雖然我知道分兩步完成:1)通過正則表達式獲取三部分數字 2)使用另一行來連接它們,但我仍然更喜歡正則表達式,以便代碼更優雅。
感謝您的任何建議!
您可以使用r'(\d{6})(-?)(\d{2})\2(\d)'
然后加入組 1、3 和 4,或使用"\\1\\3\\4"
替換
只會匹配這兩個輸入:
123456-78-9,或 123456789
如果需要,您可以為其設置邊界條件。
您可以將數字部分放在捕獲組中,然后僅將整個匹配替換為捕獲的組。
嘗試類似:
\b(\d+)-?(\d+)-?(\d)\b
..並替換為:
\1\2\3
請注意,您使用的兩個非捕獲組是多余的。 (?:-)?
= -?
.
Python 示例:
import re
regex = r"\b(\d+)-?(\d+)-?(\d)\b"
test_str = ("123456-78-9\n"
"123456789")
subst = "\\1\\2\\3"
result = re.sub(regex, subst, test_str, 0, re.MULTILINE)
if result:
print (result)
Output:
123456789
123456789
在線嘗試。
這里最簡單的做法是首先使用re.sub
從輸入中刪除所有非數字字符。 然后,使用相等比較來檢查輸入:
inp = "123456-78-9"
if re.sub(r'\D', '', inp) == '123456789':
print("MATCH")
編輯:如果我誤解了你的問題,而輸入可以是任何東西,而你只想匹配給定的兩種格式,然后使用替代:
\b(?:\d{6}-\d{2}-\d|\d{9})\b
腳本:
inp = "123456-78-9"
if re.search(r'\b(?:\d{6}-\d{2}-\d|\d{9})\b', inp):
print("MATCH")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.