查找所有字符都用+括起来

时间:2017-10-27 11:58:11

标签: c# regex

我有长字符串,现在我需要在字符串中找到每个字符(不是数字)都用+符号括起来。

例如

  • 1q + 1q + 1:result- false
  • 1 + q + 1 + q + 1:result- true
  • q + a + 123:result - false

正如你所看到的,每个char必须用+包围,才是真的。

注意:只需检查Firebase之间的字符。如果字符串中没有任何字母,那么它应该返回true。 (例如:1 + 1 + 1或1 ++。25,+ 5将返回true)

我正在尝试使用正则表达式。但它没有用。

[a-zA-Z]

.NetFiddle

2 个答案:

答案 0 :(得分:2)

反过来检查是否有一个未包含在+中的字符,但是看起来有负面并且向后看:

public static bool IsValidPattern(string str)
  {
     return !Regex.IsMatch(str, @"((?<!\+)[a-zA-Z])|([a-zA-Z]+(?!\+))");
  }

Fiddle here

简短说明:

|:匹配((?<!\+)[a-zA-Z])([a-zA-Z](?!\+))

((?<!\+)是一个负面的背后隐藏,可确保以下([a-zA-Z])之前没有\+

((?!\+)是一个负向前瞻,可确保前面的[a-zA-Z]未跟\+

所以第一种方法是匹配'a+', 'c+'之类的字符串,依此类推第二种方法('+a', '+c'),这被视为无效。

答案 1 :(得分:1)

正则表达式具有简洁的优点,但同时可能变得非常神秘且难以维护。

您是否有任何理由不希望您的代码清楚地表达其所做的事情以及将来能否添加任何其他条件?

public static bool IsValidPattern(string str)
{
    for (int i = 0; i < str.Length; i++)
    {
        if (char.IsLetter(str[i]))
        {
            if (i == 0 || i == str.Length - 1 || str[i - 1] != '+' || str[i + 1] != '+')
            {
                return false;
            }
        }
    }

    return true;
}