How to extract the strings between two special characters using Regular Expressions in C#
You can do it like this
using System.Text.RegularExpressions;
using System;
public class Test
{
public static void Main(){
string s = "My name is #Dave# and I am #18# years old";
Regex r = new Regex(@"#(.+?)#");
MatchCollection mc = r.Matches(s);
Console.WriteLine("Name is " + mc[0].Groups[1].Value);
Console.WriteLine("Age is " + mc[1].Groups[1].Value);
}
}
Demo here
I don't know what your application is but I must say this is not a very robust looking data transfer method. Start getting a few extra #
s in there and it all goes wrong. For example people with #
in their names!
However if you can guarantee that you will always be working with a string of this format then this does work.
Explanation of Regex #(.+?)#
First #
matches a #
(
begins a group. Indexed into in .Groups[1]
in the code. [0]
is the whole match eg #Dave#
not just Dave
.+?
matches at least one character. .
is a character. +
is repetition (at least
once). And ?
tells the regex engine to be lazy - so don't match a #
as that will get matched by our final #
)
close the group
#
matches another #
- the 'closing' one in this case
A regular expression such as "#[^#]+#"
would match a hash, followed by one or more none-hash characters, followed by another hash.
There are various alternatives that would work for this such as "#.*?#"
.
The following code would output the #P_NAME# and #P_AGE#.
string p = "My Name is #P_NAME# and \r\n I am #P_AGE# years old";
Regex reg = new Regex("#[^#]+#");
MatchCollection matches = reg.Matches(p);
foreach (Match m in matches)
{
Console.WriteLine(m.Value);
}
Thanks everyone..
Following worked for me...
string str = "My Name is #P_NAME# and \r\n I am #P_AGE# years old";
MatchCollection allMatchResults = null;
var regexObj = new Regex(@"#\w*#");
allMatchResults = regexObj.Matches(str);
'allMatchResults' contains #P_NAME# and #P_AGE# (i.e. including # character). But having it helps my other logic