You can easily use regex to verify a regular language. My question is can you use it to verify a context-sensitive language? How powerful is the modern regex in the hierarchy?
.NET provides balancing groups that you should be able to use to do this; something like:
^(?<n>(?<o>a))*(?<-n>b)*(?<-o>c)*(?(n)(?!))(?(o)(?!))$
Increment n and o for each a, decrement n for each b and then o for each c, then fail the match ((?!)) if either counter is still greater than zero.
n
o
a
b
c
(?!)