- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
嘿,第一次在这个很棒的社区发帖。
我的 C# 应用程序中有一个正则表达式来解析变量的赋值:
NewVar = 40
在文本框中输入。我希望我的正则表达式返回(使用 Regex.Split)变量的名称和值,非常简单。这是我到目前为止的正则表达式:
var r = new Regex(@"^(\w+)=(\d+)$", RegexOptions.IgnorePatternWhitespace);
var mc = r.Split(command);
我的目标是在 Regex 中修剪空白,而不是使用返回值的 Trim() 方法。目前,它可以工作,但它在 MatchCollection 的开头返回一个空字符串,在结尾返回一个空字符串。
使用上面的输入示例,这是从 Regex.Split 返回的内容:
mc[0] = ""
mc[1] = "NewVar"
mc[2] = "40"
mc[3] = ""
所以我的问题是:为什么它在开头和结尾返回一个空字符串?
谢谢。
最佳答案
RegEx.Split 返回四个值的原因是您只有一个匹配项,因此 RegEx.Split 返回:
RegEx.Split 的主要目的是提取匹配正则表达式之间的任何文本,例如,您可以使用带有“[,;]”模式的 RegEx.Split 以逗号或分号。在 NET Framework 1.0 和 1.1 中,Regex.Split 仅返回拆分值,在本例中为“”和“”,但在 NET Framework 2.0 中,它被修改为还包括在 Regex 中由 () 匹配的值,这就是为什么你根本看不到“NewVar”和“40”。
您要查找的是 Regex.Match
,而不是 Regex.Split
。它会做你想做的:
var r = new Regex(@"^(\w+)=(\d+)$");
var match = r.Match(command);
var varName = match.Groups[0].Value;
var valueText = match.Groups[1].Value;
请注意,RegexOptions.IgnorePatternWhitespace 意味着您可以在模式中包含额外的空格 - 它与匹配的文本无关。由于您的模式中没有多余的空格,因此没有必要。
关于C# Regex.Split - 子模式返回空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1735177/
我正在尝试创建一个程序,其中字符串的前三个字符重复给定次数,如下所示: foo('Chocolate', 3) # => 'ChoChoCho' foo('Abc', 3) # => 'AbcAbcA
我有以下字符串: std::string str = "Mode:AAA:val:101:id:A1"; 我想分离一个位于 "val:" 和 ":id" 之间的子字符串,这是我的方法: std::st
DNA 字符串可以是任意长度,包含 5 个字母(A、T、G、C、N)的任意组合。 压缩包含 5 个字母(A、T、G、C、N)的 DNA 字母串的有效方法是什么?不是考虑每个字母表 3 位,我们可以使用
是否有一种使用 levenstein 距离将一个特定字符串与第二个较长字符串中的任何区域进行匹配的好方法? 例子: str1='aaaaa' str2='bbbbbbaabaabbbb' if str
使用 OAuth 并使用以下函数使用我们称为“foo”(实际上是 OAuth token )的字符串加密 key public function encrypt( $text ) { // a
我是一名优秀的程序员,十分优秀!