regex to find a word before and after a specific word
I need a regex that gives me the word before and after a specific word, included the search word itself.
Like: "This is some dummy text to find a word" should give me a string of "dummy text to" when text is my search word.
Another question, it's possible that the string provided will contain more then once the search word so I must be able to retrieve all matches in that string with C#.
Like "This is some dummy text to find a word in a string full with text and words" Should return:
- "dummy text to"
- "with text and"
EDIT: Actually I should have all the matches retu开发者_JAVA技巧rned that contain the search word. A few examples: Text is too read. -> Text is
Read my text. -> my text
This is a text-field example -> a text-field example
EDIT:
If you want to grab all the content from the space before first word to the space after the word use:
(?:\S+\s)?\S*text\S*(?:\s\S+)?
A simple tests:
string input = @"
This is some dummy text to find a word in a string full with text and words
Text is too read
Read my text.
This is a text-field example
this is some dummy la@text.be to read";
var matches = Regex.Matches(
input,
@"(?:\S+\s)?\S*text\S*(?:\s\S+)?",
RegexOptions.IgnoreCase
);
the matches are:
dummy text to with text and Text is my text. a text-field example dummy la@text.be to
//I prefer this style for readability
string pattern = @"(?<before>\w+) text (?<after>\w+)";
string input = "larry text bob fred text ginger fred text barney";
MatchCollection matches = Regex.Matches(input, pattern);
for (int i = 0; i < matches.Count; i++)
{
Console.WriteLine("before:" + matches[i].Groups["before"].ToString());
Console.WriteLine("after:" + matches[i].Groups["after"].ToString());
}
/* Output:
before:larry
after:bob
before:fred
after:ginger
before:fred
after:barney
*/
/[A-Za-z'-]+ text [A-Za-z'-]+/
Should work in most cases, including hyphenated and compound words.
([A-z]+) text ([A-z]+)
would do nicely
[a-zA-Z]+\stext\s[a-zA-Z]+
I believe this will work nicely
精彩评论