我需要验证字符串是否采用某种格式......这是规则。
AnyString
表示一个或多个unicode字符的字符串,不包括冒号和点(AnyString
不允许使用冒号和点字符。)示例:
可以......
AnyString:AnyString.AnyString
AnyString:AnyString
AnyString.AnyString
AnyString
不能......
AnyString:.AnyString
AnyString.AnyString:AnyString
AnyString:
AnyString.
:AnyString
.AnyString
我尝试了很多不同的组合,而且我在正则表达式上的表现还不够好。
提前致谢
答案 0 :(得分:4)
嗯,看起来像:
(请注意,当我编写上述内容时,您现在编辑的解释都没有出现,因此它仅基于示例。)
所以我希望这是一个像这样的正则表达式:
^[^.:]+(?::[^.:]+)?(?:\.[^.:]+)?$
注意:
您希望将所有这些内容放在逐字字符串文字中,以避免必须转义反斜杠,例如。
var regex = new Regex(@"^[^.:]+(?::[^.:]+)?(?:\.[^.:]+)?$");
^
匹配字符串的开头
[^.:]
将匹配除点或冒号之外的任何字符+
是“至少一个”(?:<subexpression>)
是non-capturing group \.
是一个转义点,因为.
表示“任何字符”?
是“零或一”(即可选)$
匹配字符串的结尾测试代码:
using System;
using System.Text.RegularExpressions;
class Test
{
static readonly Regex regex =
new Regex(@"^[^.:]+(?::[^.:]+)?(?:\.[^.:]+)?$");
static void Main()
{
AssertValid("AnyString:AnyString.AnyString",
"AnyString:AnyString",
"AnyString.AnyString",
"AnyString");
AssertInvalid("AnyString:.AnyString",
"AnyString.AnyString:AnyString",
"AnyString:",
"AnyString:..Anystring",
"AnyString.",
":AnyString",
".AnyString");
}
static void AssertValid(params string[] inputs)
{
foreach (var input in inputs)
{
if (!regex.IsMatch(input))
{
Console.WriteLine("Expected to match but didn't: {0}",
input);
}
}
}
static void AssertInvalid(params string[] inputs)
{
foreach (var input in inputs)
{
if (regex.IsMatch(input))
{
Console.WriteLine("Expected not to match but did: {0}",
input);
}
}
}
}
答案 1 :(得分:0)
这是一个基本版本:(?:[^:.]+:)?(?:[^:.]+\.)?[^:.]+
。如果您更严格地定义Anystring
,则可以改进。
您的基本要求看起来有3个部分。零或一个&#34; Anystring&#34; s后跟一个冒号,然后是零或一个&#34; Anystring&#34; s后跟一个点,然后是强制性的&#34; Anystring&#34;。这反映在正则表达式的结构中。
根据我的信息,我认为[^:.]+
是一个与Anystring
匹配的正则表达式,因为唯一的限制是
答案 2 :(得分:0)
/^[a-z]+[:.]?[a-z]+[:.]?[a-z]+$/i
怎么样?那个不包括数字。什么是“AnyString”允许包含?
答案 3 :(得分:0)
此appears to符合您列出的所有条件:
^[^.:]+(:[^.:]+)?(\.[^.:]+)?$
请注意,我认为AnyString
字面上可以是不包含冒号或句号的任何内容。另请注意,我添加了开始/结束行锚点。如果需要,您可以删除它们。
此正则表达式以人类语言翻译为:
答案 4 :(得分:0)
试试这个
(.+):(.+)\.(.+)|(.+)\.(.+)
答案 5 :(得分:0)
如果我们正确地将其分解为逻辑部分,那么匹配规则非常简单。
我将采用字符串可以包含的最大可能结构
即
TEXT:TEXT.TEXT
我将按如下方式打破这个结构:
**TEXT** then **:CHARACTER** then **TEXT** then **.CHARACTER** then **TEXT**
此细分意味着
1. your text starts with a letter, then 0 or more series of letters follow
2. after it can either contain or not contain a colon which is immediately followed by a letter
3. then again 0 or more series of letter; pay attention here **0 or more**
4. then it can contain or not contain a dot immediately followed by a letter
5. then again 0 or more series of letters; pay attention here **0 or more**
在经典的正则表达式定义语言中,正则表达式看起来像
[A..Za..z]+ (:[A..Za..z]){0,1} [A..Za..z]* (\.[A..Za..z]){0,1} [A..Za..z]*
我已经分开了定义上面1到5点的部分,以方便阅读。 在实际使用中,正则表达式中不应有空格。
希望这是有帮助的。
干杯。