【问题标题】:Regex split for words containing periods正则表达式拆分包含句点的单词
【发布时间】:2012-06-12 13:09:31
【问题描述】:

谁能告诉我如何修改这个正则表达式以允许字符串中的句点?

string[] parts = Regex.Split(s, @"\b|[^\.#_a-zA-Z0-9()=><!%]");

如果我提供字符串:"HELLO ABC.123"

这个正则表达式返回{"HELLO", "ABC", ".", "123"}

我要回{"HELLO", "ABC.123"}

请原谅我对正则表达式模式的无知。

编辑:我使用的是 C# 3.5

【问题讨论】:

  • 不同的语言有不同的内置正则表达式函数(C#有Regex.Split();php有preg_split())——你用的是什么语言?它看起来像 C#,但应该指定,以便我们知道您是否使用了正确的函数。
  • 那你应该把C♯放在标签集中,这样我们这些无视微软的人就可以屏蔽它。
  • @tchrist - 感谢您的有用评论......我的问题更多地与正则表达式模式有关,这就是为什么我只用正则表达式标记它。

标签: c# regex string-split


【解决方案1】:

\b 匹配ABC.123 中句点的两边。 你可以改变它来避免这种情况。例如:

(?<![\w.])(?=[\w.])|(?<=[\w.])(?![\w.])

给出完整的引用表达式:

@"(?<![\w.])(?=[\w.])|(?<=[\w.])(?![\w.])|[^\w.#()=><!%]+"

您可能希望将#()=&gt;&lt;!% 字符添加到所有字符类中。

【讨论】:

  • 效果很好!感谢您的帮助!
【解决方案2】:

只需从\b|[^\.#_a-zA-Z0-9()=&gt;&lt;!%] 中删除\b,然后使用:

string[] parts = Regex.Split(s, @"[^#_a-zA-Z0-9()=><!%]");

【讨论】:

  • 这不起作用,它仍然将字符串分成4部分,而不是2。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-09
  • 1970-01-01
  • 2016-12-07
相关资源
最近更新 更多