開始的如何在開始時創建一個與所有沒有數字的字母數字匹配的正則表達式?正則表達式不是從數字
現在我有"^[0-9][a-zA-Z0-9_]"
例如,1AB將不匹配,AB1將匹配,1_bc將不匹配,BC_1將匹配。
開始的如何在開始時創建一個與所有沒有數字的字母數字匹配的正則表達式?正則表達式不是從數字
現在我有"^[0-9][a-zA-Z0-9_]"
例如,1AB將不匹配,AB1將匹配,1_bc將不匹配,BC_1將匹配。
有三件事情錯了你寫的是什麼。
首先,要否定字符類,請將^
置於的括號內,而不是在它們之前。 ^[0-9]
的意思是「任何數字,在字符串的開始處」; [^0-9]
的意思是「除數字之外的任何東西」。
二,[^0-9]
將匹配任何東西這不是一個數字,不只是字母和下劃線。你真的想說第一個字符「不是數字,而是數字,字母或下劃線」,對嗎?雖然這不是不可能這麼說,但將它合併爲「是字母還是下劃線」要容易得多。
此外,你忘了重複最後一個字符集。按原樣,你恰好匹配兩個字符,因此b1
將起作用,但b12
不會。
所以:
[a-zA-Z_][a-zA-Z0-9_]*
在其他的話:一個字母或下劃線,其次是零或多個字母,數字或下劃線。
我不完全確定這是你真正想要的,至少如果正則表達式是你的整個解析器。例如,在foo-bar
中,是否要使bar
匹配?如果是這樣,在123spam
中,您是否希望spam
匹配?但這正是你想要寫的東西。
$ abarnert謝謝你的回答(和Debuggex Demo的+1)。這正是我所需要的。 – Apollo 2014-10-27 20:38:59
這應做到:
^[^0-9][a-zA-Z0-9_]+$
釋:
^
:行[^0-9]
:匹配的任何東西,但一個數字一個[a-zA-Z0-9_]+
:匹配一個或更多字母數字字符$
:匹配線結束時,您可以使用此:^[A-Za-z_][A-Za-z0-9_]*$
另一項建議,試試這個:
\b([a-zA-Z][^\s]*)
您可以使用此代碼來遍歷結果:
reobj = re.compile(r"\b([a-zA-Z][^\s]*)")
for match in reobj.finditer(subject):
start = match.start()
end = match.end()
text = match.group()
你可以使用這個表達式:
^[a-z]\w+$
正則表達式的想法是,
^[a-z] -> Have to start with a letter
\w+$ -> can contain multiple alphanumeric characters (\w is the shortcut for [A-Za-z_])
請記住正則表達式標誌i
的不敏感和m
爲多。
的Python代碼是:
import re
p = re.compile(ur'^[a-z]\w+$', re.MULTILINE | re.IGNORECASE)
test_str = u"would match\nab1\nbc_1\n\nwould not match\n1_bc\n1ab"
re.findall(p, test_str)
你的意思是從行開始啓動? – 2014-10-27 20:32:12