如果没有数字,我怎么获取第一个字符:
我需要查找所有出现'['
的地方且之后没有数字的情况。
例如:
[abc] pass
[cxvjk234] pass
[123] fail
现在,我有这个:
((([[])([^0-9])))
它获取了前两个字符,而我只需要一个。
通常情况下,要匹配一些不跟数字的模式,您需要在表达式中添加一个 (?!\d)
/ (?![0-9])
负向预查。
\[(?!\d)
\[(?![0-9])
^^^^^^^^^
[
符号。
(\[)([^0-9])
- 它匹配一个[
然后是一个ASCII数字以外的字符。(?<=\[)\D
(?<=\[)[^0-9]
(?<=\[)
- 正向后行断言,要求在当前位置之前有一个[
字符(但不包括这个字符)...\D
/ [^0-9]
- 非数字。注意:如果只想排除ASCII数字,则可以使用带有RegexOptions.ECMAScript
标志的\D
。也许你正在寻找的是 \[([^0-9])
,你期望 [123abc]
能通过吗?
一个可能的解决方案是:
\[\D[^]]*\]
# look for [
# \D - not a digit
# anything not ], zero or more times
# followed by ]
不要使用太多的括号。括号既是分组符,也决定了返回匹配的内容。
\[([^0-9])
如果你绝对需要使用括号,可以使用(?:...)
来表示分组但不作为匹配结果的一部分。
(?:(?:(?:\[)([^0-9])))
([[])
?为什么不直接用\[
呢? - Marc B@"(?<=\[)\D"
。 - Wiktor Stribiżew