我要尋找一個正則表達式以下條件:尋找一個正則表達式
輸入 - 字符串的長度
輸出 - 如果字符串包含正好2個大寫字符或字符串只包含2返回true數字。
真正情形
SS22
S5834534P
1ffgdfjdfS2
假案
123SSS
SSSSSS
+++ 1 ++++ 1 ++++ 3
感謝您的幫助。
我要尋找一個正則表達式以下條件:尋找一個正則表達式
輸入 - 字符串的長度
輸出 - 如果字符串包含正好2個大寫字符或字符串只包含2返回true數字。
真正情形
SS22
S5834534P
1ffgdfjdfS2
假案
123SSS
SSSSSS
+++ 1 ++++ 1 ++++ 3
感謝您的幫助。
egrep '^(([^A-Z]*[A-Z][^A-Z]*[A-Z][^A-Z]*)|([^0-9]*[0-9][^0-9]*[0-9][^0-9]*))$' test.txt
的想法是,如果你想找到正好兩個字符的比賽,你需要找到字符串:
EDIT
較短的形式:
egrep '^(([^A-Z]*([A-Z][^A-Z]*){2})|([^0-9]*([0-9][^0-9]*){2}))$' test.txt
謝謝hudolejev!這種情況下修改的表達式是什麼:或者是2位數字,或者是2位大寫字符串,但不是兩種情況。例如 - 22SS無效,因爲兩個條件都是真的。 22SSS有效,因爲只有1個條件成立。 – VVV
'(^([^ AZ] *([AZ] [^ AZ] *){2} $)|(^ [^ 0-9] *([0-9] [^ 0-9] *){ 2})$)'將您的字符串邊界移動到每個子表達式。 –
這裏你需要的是'XOR'而不是'OR'。從理論上講,這可以通過從一組全部匹配中減去* digit - **和** - letter *匹配的子集來實現。至於這個正則表達式,'OR'很容易,但'AND'很難。我會在兩次運行中執行它:第一次是上面給出的,第二次是'egrep'^([^ A-Z] *([A-Z] [^ A-Z] *){2})$'test.txt | egrep'^([^ 0-9] *([0-9] [^ 0-9] *){2})$''<<這將給你所有包含兩個字母和兩個數字的行。你必須從第一組比賽中排除這些。對不起,在C#線程中Bash特有的(: – hudolejev
你的努力在哪裏?你使用什麼語言或工具? – squiguy
我們知道如何處理個案(2位數字,2個大寫字母),但不知道如何考慮OR條件。我們正在使用C#。謝謝。 – VVV
(2DIGITS | 2UPPER) –