Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
836 views
in Technique[技术] by (71.8m points)

regex - How to extract the strings between two special characters using Regular Expressions in C#

I am totally new to regular expressions. And what I need to achieve is, I have a string variable containing the following string for example,

"My Name is #P_NAME# and I am #P_AGE# years old"

I need to extract the two strings P_NAME and P_AGE using regular expressions (to a string array or two string variables etc). i.e. the string starts with a # and ends with a # and I need to extract the middle part.

How can I do this in C# using Regular Expressions..?

And how can I extract the same above in case I have a new line character in between as well. i.e. for example,

"My Name is #P_NAME# and I am #P_AGE# years old".

Thanks

Thanks Everyone...

Following worked for me... I cannot publish my own answer as the answer until 8 hours expires in stackoverflow... :)

string str = "My Name is #P_NAME# and 
 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 logics than not having it.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...