C# 作用于点的正则表达式
我有一个正则表达式:C# 作用于点的正则表达式,c#,regex,string,C#,Regex,String,我有一个正则表达式: string[] values = Regex .Matches(mystring4, @"([\w-[\d]][\w\s-[\d]]+)|([0-9]+)") .OfType<Match>() .Select(match => match.Value.Trim()) .ToArray(); string[]value=Regex .Matches(mystring4,@“([\w-[\d][\w\s-[\d]]+)|([0-9]+)”
string[] values = Regex
.Matches(mystring4, @"([\w-[\d]][\w\s-[\d]]+)|([0-9]+)")
.OfType<Match>()
.Select(match => match.Value.Trim())
.ToArray();
string[]value=Regex
.Matches(mystring4,@“([\w-[\d][\w\s-[\d]]+)|([0-9]+)”)
第()类
.Select(match=>match.Value.Trim())
.ToArray();
此正则表达式将此字符串转换为:
我的有限公司(52100000/58447000)”
对于这些字符串:
我的有限公司-52100000-58447000
这也适用于非英语字符
但是有一个问题,当我有这个字符串时:MY.LIMITED.COMPANY.,它也会拆分它。我不想这样。我不想让正则表达式处理点。我怎么做呢?谢谢。你可以在模式中的每个
\w
之后添加点,我还建议删除不必要的(
和)
:
string[]value=Regex
.Matches(“MY.LIMITED.COMPANY.(52100000/58447000)”,@“[\w.-[\d]][\w.[s-[\d]]+|[0-9]+”)
第()类
.Select(match=>match.Value.Trim())
.ToArray();
foreach(值中的var s)
控制台。写入线(s);
见
模式:
-一个Unicode字母或下划线([\w.-[\d]]
)或一个点([\w-[\d]]
)
-1个或多个字符(由于末尾有[\w.\s-[\d]+
量词),这些字符可以是Unicode字母或下划线、+
或空格(
)\s
-或|
-一个或多个仅ASCII数字[0-9]+
\w
之后添加点,我还建议删除不必要的(
和)
:
string[]value=Regex
.Matches(“MY.LIMITED.COMPANY.(52100000/58447000)”,@“[\w.-[\d]][\w.[s-[\d]]+|[0-9]+”)
第()类
.Select(match=>match.Value.Trim())
.ToArray();
foreach(值中的var s)
控制台。写入线(s);
见
模式:
-一个Unicode字母或下划线([\w.-[\d]]
)或一个点([\w-[\d]]
)
-1个或多个字符(由于末尾有[\w.\s-[\d]+
量词),这些字符可以是Unicode字母或下划线、+
或空格(
)\s
-或|
-一个或多个仅ASCII数字[0-9]+
- 要匹配单词,您只需要一系列单词字符:
\w+
这将匹配任何字母数字字符,包括下划线(
)\uu
- 考虑到您希望单词以点结尾的可能性,您可以添加它并使其可选(一个或零个匹配项): \w+\ 注意转义,使其成为实际字符,而不是字符类“任意字符”
- 为了匹配下面的另一个潜在单词,我们现在只需复制此匹配,在前面添加一个空格,并再次使用
量词将其设置为可选: \w+\.?(?:\w+\.?)* 如果您没有看到以*
是一个不匹配的组。本质上,这与普通组类似,但不会在结果中保存匹配的组开头的组:
- 就这样。此模式将按预期分割演示字符串。当然,可能还有其他可能的字符未被此模式覆盖
另一种选择是,直接使用C#的正则表达式解析器,您也可以尝试这种方法。这种方法的工作原理类似,但不包括任何解释,这对于刚开始使用的人来说可能不太理想。我会简化表达式。如果前面的名称包含数字怎么办?不是说我的解决方案没有完全模仿原始格式inal表达式。它将允许在名称部分使用数字 让我们从头开始:
- 要匹配单词,您只需要一系列单词字符:
\w+
这将匹配任何字母数字字符,包括下划线(
)\uu
- 考虑到您希望单词以点结尾的可能性,您可以添加它并使其可选(一个或零个匹配项): \w+\ 注意转义,使其成为实际字符,而不是字符类“任意字符”
- 为了匹配下面的另一个潜在单词,我们现在只需复制此匹配,在前面添加一个空格,并再次使用
量词将其设置为可选: \w+\.?(?:\w+\.?)* 如果您没有看到以*
是一个不匹配的组。本质上,这与普通组类似,但不会在结果中保存匹配的组开头的组:
- 就这样。此模式将按预期分割演示字符串。当然,可能还有其他可能的字符未被此模式覆盖
string[] values = Regex
.Matches("MY. LIMITED. COMPANY. (52100000 / 58447000)", @"[\w.-[\d]][\w.\s-[\d]]+|[0-9]+")
.OfType<Match>()
.Select(match => match.Value.Trim())
.ToArray();
foreach (var s in values)
Console.WriteLine(s);