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)。让我澄清一下。当我说十进制时,我指的是数字的基数(二进制、八进制、十进制、十六进制等)。更具体地说,我说的是整数;第一个数字将始终是十进制整数,而不是浮点数。我说的是计算机科学意义上的十进制;不是数学意义上的。