Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
494 views
in Technique[技术] by (71.8m points)

c# - Regex to get one character not followed with digit

How can I get first character if not have int inside:

I need to look all the place have '[' without integer after.

For example:

[abc] pass
[cxvjk234] pass
[123] fail

Right now, I have this:

((([[])([^0-9])))

It gets the first 2 characters while I need only one.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

In general, to match some pattern not followed with a digit, you need to add a (?!d) / (?![0-9]) negative lookahead to the expression:

[(?!d)
[(?![0-9])
  ^^^^^^^^^

See the regex demo. This matches any [ symbol that is not immediately followed with a digit.


Your current regex pattern is overloaded with capturing groups, and if we remove those redundant ones, it looks like ([)([^0-9]) - it matches a [ and then a char other than an ASCII digit.

You may use

(?<=[)D

or (if you want to only match the ASCII digits with the pattern only)

(?<=[)[^0-9]

See the regex demo

Details:

  • (?<=[) - a positive lookbehind requiring a [ (but not consuming the [ char, i.e. not returning it as part of the match value) before...
  • D / [^0-9] - a non-digit. NOTE: to only negate ASCII digits, you may use D with the RegexOptions.ECMAScript flag.

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...