[英]How can I match four number fields or a text string using regex
因此,我正在連接的傳感器輸出 4 個多位整數(由空格分隔)或錯誤字符串。
理想情況下,我的正則表達式將返回上述任一場景的匹配項並拒絕任何其他輸出 - 例如,如果只有 3 個數字是 output。 然后我可以檢查以下 c# 中是否有 4 組(數字輸出)或 1 組(錯誤字符串輸出)。
我擁有的正則表達式一直匹配並在少於 4 個數字時返回空格,所以我仍然需要檢查所有內容。
我試過放入?:
但格式中斷。 任何正則表達式都能應對挑戰? 提前致謝。
([0-9]+\s)([0-9]+\s)([0-9]+\s)([0-9]+)|([a-zA-Z\s_!]+)
因此,數字示例將是11 222 33 4444
或Sensor is in an error state!
不正確的 output 將是222 11 3333
,因為它只有 3 個字段
另外 - 我需要捕獲四個數字(但不是空格)或錯誤字符串。
您可以捕獲只有數字的 4 個組,並匹配組外的空白字符。
否則匹配字符 class 中列出的任何字符的 1+ 倍。 請注意, \s
也可以匹配換行符,並且由於\s
位於字符 class 中,因此匹配也可以僅包含空格。
要匹配整個字符串,您可以添加錨點。
^(?:([0-9]+)\s([0-9]+)\s([0-9]+)\s([0-9]+)|[a-zA-Z\s_!]+)$
匹配錯誤字符串的另一個選項是開始匹配沒有數字的單詞字符,可選地由空格字符重復,然后再次匹配沒有數字的單詞字符。
^(?:([0-9]+)\s([0-9]+)\s([0-9]+)\s([0-9]+)|[^\W\d]+(?:\s+[^\W\d]+)*!?)$
如果錯誤消息中可能有數字,但您不想僅匹配數字或空白字符,則可以使用否定的前瞻來排除它。
^(?:([0-9]+)\s([0-9]+)\s([0-9]+)\s([0-9]+)|(?![\d\s]*$).+)$
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.