C# 结尾与任何字符串匹配的正则表达式

C# 结尾与任何字符串匹配的正则表达式,c#,.net,regex,string,C#,.net,Regex,String,我有一个脚本文件,我正试图加载,我似乎无法让我的正则表达式工作。我对正则表达式有点生疏,但我很惊讶我的正则表达式不起作用 基本上,每一行(除了空行和以注释(“/”)开头的行)应采用以下格式: [decimal number],[hex number],[hex number],[any string of characters] 因此,例如,每个非空白或完全注释的行应如下所示: 01, 0x00100204, 0x00000000, some string goes here 我的比赛模式如

我有一个脚本文件,我正试图加载,我似乎无法让我的正则表达式工作。我对正则表达式有点生疏,但我很惊讶我的正则表达式不起作用

基本上,每一行(除了空行和以注释(“/”)开头的行)应采用以下格式:

[decimal number],[hex number],[hex number],[any string of characters]
因此,例如,每个非空白或完全注释的行应如下所示:

01, 0x00100204, 0x00000000, some string goes here
我的比赛模式如下

"[0-9]+[\\s]+,0[xX][0-9a-fA-F]+[\\s]+,0[xX][0-9a-fA-F]+[\\s]+,"
我省略了尾部(字符串的位置),因为从我对正则表达式的理解来看,只要它能找到与匹配模式匹配的子字符串,它就会匹配。我的假设正确吗

----编辑------

我还想指出,我不在乎数字的结尾和下一个逗号之间有多少空格,因此在正则表达式模式中,
[\\s]+
将逗号放在
\s+
之前

根据您的需要选择<代码>\s匹配任何空白字符
[\r\n\t\f]
。如果只查找空格,请使用空格而不是
\s

\s*   zero or more times
\s+   one or more times
\s?   zero or one times

在空格和逗号之间切换位置应有助于:

@"\d+,\s*0[xX][0-9a-fA-F]+,\s*0[xX][0-9a-fA-F]+,\s*"

初始的
@
有助于转义,您不应该编写
[\s]+
,因为
\s
已经是一个字符类,很像
\d

您的正则表达式应该是这样的:

"[0-9]+,\\s*0[xX][0-9a-fA-F]+,\\s*0[xX][0-9a-fA-F]+,\\s*"
匹配整个字符串的更好方法是:

@"(?mi)^[0-9]+,\s*0x[0-9a-f]+,\s*0x[0-9a-f]+,.*$"
如果您知道您将始终有
1
或更多的空格字符,请使用
\s+

使用逐字字符串(由
@
引入)。反斜杠不需要在逐字字符串中转义

使用
RegexOptions.IgnoreCase
选项,而不是提供小写和大写变体

string pattern = @"^\d+,\s*0x[0-9a-f]+,\s*0x[0-9a-f]+,.*$";
MatchCollection matches = Regex.Matches(input, pattern,
                                    RegexOptions.IgnoreCase | RegexOptions.Multiline);

^
$
匹配行首和行尾。如果输入字符串包含所有行,请使用
RegexOptions.Multiline
选项,使
^
$
匹配任何行的开头和结尾,而不仅仅是整个字符串的开头和结尾。

这一选项可以帮助您解决问题,每个段也可以在组中使用:

([0-9]+),[\s]+(0[xX][0-9a-fA-F]+,\s+)(0[xX][0-9a-fA-F]+,\s+)(.+)

您可以使用
\d
代替
[0-9]
,并更改此模式以排除您不需要的任何内容;我不想分组。

这里不需要正则表达式。简单的拆分就足够了

string input = "01, 0x00100204, 0x00000000, some string goes here";

var parts = input.Split(new char[] { ',' }, 4, StringSplitOptions.RemoveEmptyEntries);

格式和示例不匹配。格式中没有空格,但示例中的
后面有空格,您的正则表达式正在搜索
前面的空格,不清楚您想要什么。您只想知道一行是否与您的正则表达式匹配,还是要捕获尾随字符串?请更具体地说明您想要获得的内容。您将希望使用
*
而不是
+
来计算空间中的“不在乎”,因为
+
将匹配一个或多个,
*
为零或更多。您可以通过在线测试人员检查您的正则表达式。请参阅或举个例子。谢谢你的提示Ryan,我不知道他可能正在逃避。没有必要在
[]
中逃避。如果他使用的是一种管理语言,其中“\”被特别处理,那么他会是的,错放了逗号。但当我没有逃脱他们时,VisualStudio对我大喊大叫。我想是因为在字符串实例化之前我没有使用
@
。所以是的,我正在转义它们。@audiFanatic是的,根据输出,您将逗号放错了位置。我需要确保第二个和第三个数字是十六进制格式的,这样就不起作用了entirely@audiFanatic那么正则表达式如何解析十进制数呢?第一个数字是一个始终为十进制的数字,由
[0-9]+
处理。第二个和第三个是十六进制,所以我需要添加
0x[0-9a-fA-F]+
,以确保它不排除任何十六进制characters@audiFanatic十进制数的形式是
123.456
(顺便说一句:根据文化背景,它可以是123456)。让我澄清一下。当我说十进制时,我指的是数字的基数(二进制、八进制、十进制、十六进制等)。更具体地说,我说的是整数;第一个数字将始终是十进制整数,而不是浮点数。我说的是计算机科学意义上的十进制;不是数学意义上的。