I am searching a string for a pattern that matches Material=
. Some examples are Material=ABC123,Color=444555
, Material=332212,Color=192929
I am new to C# and I learned about capture groups but I am wondering if its possible to do it in a cleaner way?
var pattern = new Regex("(?<label>Material)=(?<value>[^,]+)");
Match match = pattern.Match(Row2.Attributes);
var materialCode = (match.Success) ? match.Groups["value"].Value : "NA";
Edit:
I store materialCode
into a database so it can't be null. If a value isn't found it has to be "NA". Also there are lots of combos which is why I specify I need whatever value after the =
but before the ,
in the regex
-
\$\begingroup\$ That looks like the right way to me. \$\endgroup\$NetMage– NetMage2018年02月09日 23:35:23 +00:00Commented Feb 9, 2018 at 23:35
1 Answer 1
Do not set the materialCode
to another string. I am not sure, but NA
might also be a valid choice for Material=<value>
. Instead, just set it to null
.
As for the pattern itself, instead of searching for [^,]
(anything except ,
), you should look for only the valid values. Based on the given examples, I'd assume that only alphanumericals are accepted. If there is a limit on the length, then you should specify that as well.
Since, you are only looking for values assigned to Material
property; no need to store the word Material
as a matched-group result.
For eg.
Material=(?<value>[A-Z\d]{6})
-
\$\begingroup\$ I store
materialCode
into a database so it can't be null. If a value isn't found it has to be "NA". Also there are lots of combos which is why I specify I need whatever value after the=
but before the,
\$\endgroup\$Anonguy123– Anonguy1232018年01月10日 19:01:00 +00:00Commented Jan 10, 2018 at 19:01 -
4\$\begingroup\$ @Anonguy123 Those specifications/limitations should be mentioned in question. \$\endgroup\$hjpotter92– hjpotter922018年01月10日 19:29:40 +00:00Commented Jan 10, 2018 at 19:29