正则表达式比较前后的单词和空格

时间:2013-05-30 09:08:35

标签: c# .net regex

我有一个字符串数组,用户输入的商店,我想检查输入用户是否只包含特定的单词END,我不介意在之前是否有任何空格例如,单词或单词之后,用户可以输入单词END或“END”或“END”或“END”。我并不关心在单词之前或之后有多少空格我只想检查输入字符串是否只包含单词END而不考虑空格。

我试过

Regex regex_ending_char = new Regex(@"^END|^\s+END$|^END+\s$");
// to compare the word "END" only nothing before it nor after it - 
// space is of anywhere before or after the word

Match Char_Instruction_match = regex_ending_char.Match(Instruction_Separator[0]);
if (!Char_Instruction_match.Success) // True if word doesn't end with "END"
{
    richTextBox2.Text += "Error in line " + (LineNumber + 1) + ",  Code must end with 'END'" + Environment.NewLine;
}`

我也试过

Regex regex_ending_char = new Regex(@"^END|^\s+END$|^END+\s$"); 
// to compare the word "END" only nothing before it nor after 
// it - space is of anywhere before or after the word

Regex.Replace(Instruction_Separator[0], @"\s+", "");
Match Char_Instruction_match = regex_ending_char.Match(Instruction_Separator[0]);
if (!Char_Instruction_match.Success) // True if word doesn't end with "END"
{
    richTextBox2.Text += "Error in line " + (LineNumber + 1) + ",  Code must end with 'END'" + Environment.NewLine;
}`
问题是我必须只检查数组Instruction_Separator[0]的第一个元素而不是任何其他元素。因此,如果用户在单词END之前输入空格,那么“END”则Instruction_Separator数组变为Instruction_Separator[0] = " ", Instruction_Separator[1] = END,因此即使用户输入了代码,代码也会转到if条件正确的字符串他只在开头输入一个空格,如果在单词之前或之后有空格,我没有问题。

感谢大家的回复,我尊重你的所有答案。我想要做的是构建一个汇编程序,我必须检查语法错误,并且用户输入中的注释是可以的。例如,如果用户输入如下:

ORG 100 //Begin at memory location 100
LDA A // Load A
A, DEC 83 // A has a decimal value of 83
END // End the code

然后没有任何语法错误,我可以给出结果。

此外,如果用户在每行之前添加空格,那也没关系

ORG 100 //Begin at memory location 100
    LDA A // Load A
    A, DEC 83 // A has a decimal value of 83
         END // End the code

所以我想检查每一行是否包含正确的语法,并且我并不关心每行的正确格式之前或之后的任何空格。

用户语法错误类似于:

OR G 100 //Begin at memory location 100
LDA A // Load A
A, DEC 83 // A has a decimal value of 83
EN  To end the code

注意ORG写的是“OR G”,这是错误的,END也写成“EN”而用户忘记在评论“结束代码”之前放置“//”

所以我需要做的是检查最后一行是否包含单词“END”,如果有“//”,那么在它是注释之后是什么。但是如果用户想要在一行中添加注释,则必须键入“//”。如果他不想添加评论,那就不是必须的。如上所述我知道如何使用正则表达式做到这一点我试过Regex regex_ending_char = new Regex(@"^END|^\s+END$|^END+\s$");但我似乎没有正确的工作

提前感谢您的回复。

4 个答案:

答案 0 :(得分:3)

我也不会使用正则表达式。事实上:

bool b = input.Trim() == "END"

也可以工作!如果通过“空格”,您还想包含其他空格。

否则:

bool b = input.Replace(" ", "") == "END"

但是,我想如果你绝对 在那里有一个正则表达式...尝试:

^\s*END\s*(//.*)?$

用作:

Regex regex_ending_char = new Regex(@"^\s*END\s*(//.*)?$"); 

那是怎么回事?这只是绝对基本的正则表达式......

  • ^匹配字符串的开头
  • \s*匹配零个或多个空格
  • END匹配所需的字符串“END”
  • \s*如果你愿意,你可以有空格......
  • (//.*)?匹配可选的两个斜杠组,后跟零个或多个字符
  • $匹配字符串的结尾

答案 1 :(得分:1)

根据相关修改

更新了答案

您仍然不需要正则表达式。它可以通过基本的字符串操作来完成。

bool b = input.Split(new string[] { "//" },
                     StringSplitOptions.RemoveEmptyEntries)[0].Trim() == "END";

答案 2 :(得分:0)

同样,使用正则表达式的一个好例子是一个坏主意。可以使用以下代码简单地填写此要求:

var stringToTest = "Something that ends with END  ";
var valid = stringToTest
    .TrimEnd(' ')
    .EndsWith("END", StringComparison.CurrentCultureIgnoreCase); 

答案 3 :(得分:0)

不需要正则表达式:

bool ok = input.Trim() == "END";