正则表达式适用于点

时间:2016-08-19 05:59:19

标签: c# regex string

我有这个正则表达式:

string[] values = Regex
  .Matches(mystring4, @"([\w-[\d]][\w\s-[\d]]+)|([0-9]+)")
  .OfType<Match>()
  .Select(match => match.Value.Trim())
  .ToArray(); 

此正则表达式将转换此字符串: 我的有限公司(52100000/58447000)&#34 ;;

对于这些字符串:

  

我的有限公司 - 52100000 - 58447000

这也适用于非英文字符。

但是有一个问题,当我有这个字符串时:MY。有限。公司。 ,它也分裂了。我不想要那个。我不希望那个正则表达式在点上工作。我怎样才能做到这一点?感谢。

2 个答案:

答案 0 :(得分:2)

您可以在模式中的每个\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);

请参阅C# demo

<强>模式

  • [\w.-[\d]] - 一个Unicode字母或下划线([\w-[\d]])或一个点(.
  • [\w.\s-[\d]]+ - 1个或多个(由于末尾为+量词)字符为Unicode字母或下划线,.或空格(\s)< / LI>
  • | - 或
  • [0-9]+ - 一个或多个ASCII-only数字

答案 1 :(得分:1)

我简化了表达方式。如果前面的名字包含数字怎么办?并不是说我的解决方案并不完全模仿原始表达式。它将允许名称部分中的数字。

让我们从头开始:

  • 要匹配单词,您需要的是一系列单词字符:

    \ W +

    这将匹配任何字母数字字符,包括下划线(_)。

  • 考虑到您希望单词以点结尾的可能性,您可以添加它并使其成为可选(一个或零匹配):

    \ W + \。?

    注意转义使它成为一个真实的角色,而不是一个角色类&#34;任何角色&#34;。

  • 为了匹配下面的另一个潜在词,我们现在只需复制此匹配,之前添加空格,然后使用*量词再次使其成为可选项:

    \ W + \。?(?:?\ W + \)*

    如果您还没有看到以?:开头的群组是不匹配的群组。从本质上讲,它的工作方式与普通组相同,但不会在搜索结果中保存匹配的组。

  • 而且已经存在了。此模式将按预期分割您的演示字符串。当然,可能还有其他可能的角色没有被这个覆盖。

You can see the results of this matching online here and also play around with it.

要测试正则表达式(并了解它们),我建议您使用http://regex101.com等工具

它有一个输入掩码,允许您提供模式和目标字符串。在右侧,它将首先向您解释模式(以确定它是否确实是您的想法),并在下方显示所有匹配的组。请记住,它实际上使用了略微不同的正则表达式,但这对于这种简单的模式并不重要。 (我与该网站没有任何关系,只考虑它非常有用。)

作为替代方案,要直接使用C#的正则表达式解析器,您也可以尝试使用此Regex Tester。虽然不包含任何解释,但这可能不适合刚入门的人。