简体   繁体   中英

Get Regex.Matches to start the match at Position 0

I am trying to use Regex to count the number of times a certain string appears in another comma-separated string.

I am using Regex.Matches(comma-separated string, certain string).Count to grab the number. The only issue I have is that I want it to simply count as a match if it lines up at the start of the string.

For instance, if I have the comma separated string

string comma_separated = "dog,cat,bird,blackdog,dog(1)"; 

and want to see how many times the search string matches with the contents of the comma-separated string

string search = "dog";

I use:

int count = Regex.Matches(comma_separated, search).Count;

I would expect it to be 2 since it matches up with

" dog ,cat,bird,blackdog, dog (1)",

however it returns a 3 since it is also matching up with the dog part of blackdog.

Is there any way I can get it to only count as a match when it recognizes a match starting at the start of the string? Or am I just using Regex incorrectly?

As noted in the comments, a regex may not be the most logical way for you to achieve your desired result. However, if you would like to use a regex to find your matches, something like this would provide your desired result

(?<=,|^)dog

This will perform a "positive lookbehind" to ensure that the word "dog" is preceded by either a comma or is at the start of the string you are searching.

More info available on lookarounds in Regex here: https://www.regular-expressions.info/lookaround.html

  string comma_separated = "dog,cat,bird,blackdog,dog(1)";
  int count = Regex.Matches(comma_separated, string.Format(@"\b{0}\b", Regex.Escape("dog")), RegexOptions.IgnoreCase).Count;

By appending the \\b to either side of the text you can find the "EXACT" match within the text.

Try using this pattern: search = @"\\bdog"; . \\b matches word boundary.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM