【问题标题】:Regex find char '.' except for words starting with @正则表达式查找 char '.'除了以@开头的单词
【发布时间】:2018-01-18 14:20:31
【问题描述】:

假设以下句子:

这是@sys.any 和。这里@names你好。再见

我怎样才能找到所有的 '.'除了那些出现在以@开头的单词?

免责声明,在阅读了 SO 和其他论坛上的一些答案后,现在在 regex101 上玩了 2 个多小时。

【问题讨论】:

  • 解决方案实际上涉及正则表达式有多重要?你可以在 Python 中使用列表推导和一些字符串方法来做到这一点。

标签: javascript python regex regex-negation regex-group


【解决方案1】:

(^|\s)(\w*(\.))+ - 这可能满足您发布的示例文本。你可以找到所有的“。”第三组

更新:如果您的文本中有单词,以任何其他符号开头,例如#asd.qwe.zxc,您可以改进您的 reg exp:

(^|\s)[^@]?(\w*(\.))+

【讨论】:

  • 优秀,不适进一步测试使用这个正则表达式。就目前而言,这适用于给出的示例。如果有人能想到极端情况来反驳这个答案,我将不胜感激。
  • 我发现了这个正则表达式不起作用的边缘情况,regex101.com/r/FtjRfL/1,正如你在第一个作品“sys.a@ny.and”中看到的那样。我原以为它会找到所有的“。”因为@不在单词的开头。
  • @DanielNetzer 除了“@”之外,单词中应该有哪些符号?
  • 唯一重要的符号是'@',其他都可以。
【解决方案2】:

正则表达式^@|\s\w*(\.)+ 可用于仅查找和匹配没有@ 的句点。

查看一个实时示例以供参考:http://rubular.com/r/gfVY3j16Rx

【讨论】:

  • 就我理解的 OP 而言,这是按预期工作的吗? @splash58
  • 不是真的,我需要'.',而不是前面的单词。
  • 您想查看匹配组,而不是匹配结果中的已解析文本。它仅匹配(即仅匹配输出您的期间),但显示为在您的期间之前已找到作为条件的文本(没有@)。
  • regex101.com/r/FtjRfL/1,正如您在第一个单词“sys.a@ny.and.”中看到的那样。我原以为它会找到所有的“。”因为@不在单词的开头。
猜你喜欢
  • 2014-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多