当前位置: 首页 > 知识库问答 >
问题:

正则表达式,用于不能以下划线开头的空格分隔字符串

时宾实
2023-03-14

我想验证标签列表——用空格分隔的字符串。例如:

"blue white   green123 #$#! ()!!!123  q_w_e_r_t_y"

唯一的要求是,它们不能以下划线“389;”开头。什么是匹配这些标记的合适正则表达式?


我编写了一些测试用例来验证模式的正确性:

public void RegexTest()
{
    //arrange
    const string pattern = @"^PATTERN$";
    var regex = new Regex(pattern);
    var positive = new[] { "AAA", "A_", "AAA AAA", "AAA_AAAA", "AAA_AA AAA_aaa AA___   AAA", "A____", "333A%#$%#@%$__=-21-2-AA213", "+=-_0987654321`!@#$%^&*() qwertyu:/.," };
    var negative = new[] { "_AAAA", "A _AA ", "AA _AA", "A B _C", "_ " };

    //act
    var positiveMatches = positive.Select(x => regex.IsMatch(x)).ToArray();
    var negativeMatches = negative.Select(x => regex.IsMatch(x)).ToArray();

    //assert
    CollectionAssert.AreEqual(positiveMatches.Select(x => true).ToArray(), positiveMatches);
    CollectionAssert.AreEqual(new bool[negativeMatches.Length], negativeMatches);
}

共有3个答案

郭弘方
2023-03-14
(?!^_)(?!.*?\s_\w)^.*$

试试这个。见演示。

http://regex101.com/r/iO1uK1/5

东弘扬
2023-03-14

这个正则表达式应该可以:

^(?!(.*\s+)?_\w*\b).+$
周培
2023-03-14

只需使用负前瞻来检查前面没有空格或起始锚的undescores。

^(?:(?!\s_|^_).)*$

演示

 类似资料:
  • 我试图匹配包含字母数字、连字符、下划线和空格的字符串。 连字符、下划线、空格和数字是可选的,但第一个和最后一个字符必须是字母。 例如,这些都应该匹配: 我试过这个: 但它在开始/结束时与空格、下划线或连字符匹配,但它应该只允许在两者之间。

  • 我有一个,其中包含2或3个公司名称,每个名称用括号括起来。每个公司名称也可以包含括号中的单词。我需要用正则表达式将它们分开,但没有找到方法。 我的输入代码: 预期结果是: 我的代码: 这适用于和,但不适用于。 当前结果:

  • 我正在寻找一个正则表达式来识别管道分隔的csv文件中出现的未转义双引号字符。也就是说,文件是以管道分隔的,每个字段都用双引号括起来,但有些字段包含单双引号字符,应该用额外的双引号转义,以符合RFC4180的要求<例如。 "字段1"|"字段2""文本中的文本""|"正确" "字段1"|"字段2"文本中的文本"|"不正确" 因为在第一行中,一个双引号已正确转义为另一个双引号字符。 我在找一个测试来找出

  • 问题内容: 我有以下显示这种格式的文件名: 我想提取第二个下划线之后和之前的中间两个时间戳部分。因此,我使用了以下Python正则表达式字符串拆分: 但这在返回的列表中给了我两个额外的空字符串: 如何仅获取两个时间戳信息?即我想要: 问题答案: 不要使用,使用正则表达式/对象的方法。 您甚至可以命名捕获组并在字典中检索它们,尽管您使用的不是。(这种情况下的regex模式将类似于)

  • 我有一个数据帧,其中一列是一系列字符串,其中截然不同的短语要么是单个单词,要么是用空格分隔的多个单词;每个单词的第一个字母都是大写字母(例如“草莓”或“草莓果酱”)。相反,如果这些词不是同一短语的一部分,则不会间隔开(例如“jamapple”)。 我如何使用regex在一个字符串中根据上面的规则将短语分开(分为“草莓果酱”、“苹果”、“香蕉”、“梨碎”、“土豆”、“杏仁蛋糕”)。然后提取他们?即获

  • 问题内容: 我需要一个不以点开头或不以开头的正则表达式。 此正则表达式有效,但在第一个条件下失败;它不以点开头: 例如:应为有效字符串,但失败。 问题答案: 从上一个问题开始,您应该可以使用: 但是,如果您希望能够匹配1个字符串,则需要否定先行: 而且,如果您也想匹配空字符串,只需使用代替即可。