如何使用C#中的正则表达式在两个特殊字符之间提取字符串

Bat*_*ana 7 c# regex

我对正则表达式完全不熟悉.我需要实现的是,我有一个包含以下字符串的字符串变量,例如,

"我的名字是#P_NAME#,我是#P_AGE#岁了"

我需要使用正则表达式(字符串数组或两个字符串变量等)提取两个字符串P_NAME和P_AGE.即字符串以#开头,以#结尾,我需要提取中间部分.

如何使用正则表达式在C#中执行此操作..?

如果我之间有一个新的行字符,我怎么能提取相同的内容.即,例如,

"我的名字是#P_NAME#和\ r \n我是#P_AGE#岁了".

谢谢

感谢大家...

以下为我工作...我无法发布我自己的答案作为答案直到8小时到期stackoverflow ... :)

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);
Run Code Online (Sandbox Code Playgroud)

'allMatchResults'包含#P_NAME#和#P_AGE#(即包括#字符).但拥有它有助于我的其他逻辑而不是没有它.

El *_*oco 26

你可以这样做

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);
        }
}
Run Code Online (Sandbox Code Playgroud)

在这里演示

我不知道你的应用程序是什么,但我必须说这不是一个非常强大的数据传输方法.#在那里开始得到一些额外的东西,这一切都出错了.例如以#他们的名字命名的人!

但是,如果您可以保证您将始终使用此格式的字符串,那么这确实有效.

正则表达式的解释 #(.+?)#

首先#匹配a#

(开始一个小组..Groups[1]在代码中索引.[0]是整场比赛,例如#Dave#不仅仅是Dave

.+?匹配至少一个字符..是一个角色.+是重复(至少一次).并?告诉正则表达式引擎是懒惰的 - 所以不要#匹配我们的决赛将匹配的那个#

) 关闭小组

#匹配另一个#- 在这种情况下'结束'一个


sam*_*son 9

一个正则表达式,例如"#[^#]+#"匹配哈希,后跟一个或多个非哈希字符,后跟另一个哈希.

有各种各样的替代品可以用于此类"#.*?#".

以下代码将输出#P_NAME#和#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);
}
Run Code Online (Sandbox Code Playgroud)


Bat*_*ana 2

感谢大家..

以下对我有用...

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);
Run Code Online (Sandbox Code Playgroud)

'allMatchResults' 包含#P_NAME# 和#P_AGE#(即包括# 字符)。但拥有它有助于我的其他逻辑

  • 其他发帖者(即 samjudson、ipr101 或我自己)是否帮助您找到了这个答案? (4认同)