c# - Would like to split a string using a regex pattern -
i have string split
var finalquote = "2012-0001-1"; var quotenum = "2012-0001"; var revision = "1"
i used this
var quotenum = quotenum.substring(0,9); var revision = quotenum.substring(quotenum.lastindexof("-") + 1);
but can't done using regex more efficiently? come across patterns need split two.
var finalquote = "2012-0001-1"; string pat = @"(\d|[a-z]){4}-\d{4}"; regex r = new regex(pat, regexoptions.ignorecase); match m = r.match(text); var quotenum = m.value;
so far have reached here. feel not using correct method. please guide me.
edit: wanna edit pattern. splitting dashes not option first part of split contains dash. ie, "2012-0001"
i agree others using substring better solution regex this. if you're insisting on using regex can use like:
^(\d{4}-\d{4})-(\d)$
untested since don't have c# environment installed:
var finalquote = "2012-0001-1"; string pat = @"^(\d{4}-\d{4})-(\d)$"; regex r = new regex(pat); match m = r.match(finalquote); var quotenum = m.groups[1].value; var revision = m.groups[2].value;
alternatively, if want string[]
try (again, untested):
string[] data = regex.split("2012-0001-1",@"-(?=\d$)");
data[0]
quotenum
, data[1]
revision
.
update:
explanation of regex.split
:
from regex.split
documentation: the regex.split methods similar string.split method, except regex.split splits string @ delimiter determined regular expression instead of set of characters.
the regex -(?=\d$)
matches single -
given followed a digit followed end of string
match last dash in string. last digit not consumed because use zero-width lookahead assertion (?=)
Comments
Post a Comment