簡體   English   中英

如何從文本匹配組中排除某些字符?

[英]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

如果需要,您可以為其設置邊界條件。

https://regex101.com/r/ceB10E/1

您可以將數字部分放在捕獲組中,然后僅將整個匹配替換為捕獲的組。

嘗試類似:

\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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM