【问题标题】:Regex - Complex Capture正则表达式 - 复杂捕获
【发布时间】:2016-08-04 00:51:10
【问题描述】:

这很难解释,我有这个正则表达式([a-zA-Z][\w.]+|[0-9][0-9_.]*[a-zA-Z]+[\w.]*):(.*) - 它捕获Username:Whatever,它只捕获第一捕获组中的用户名。

问题是当我用电子邮件替换用户名部分时,它会捕获电子邮件 @ 之后的所有内容。我希望它完全捕捉到任何内容,甚至“随便”位。

我找不到办法。

输入示例:

username@domain.ext:123abc
username:123abc
shiny@gmail.com:abc123
Shiny:abc123

输出应该是:

username:123abc
Shiny:abc123

当前正则表达式输出:

domain.ext:123abc
username:123abc
gmail.com:abc123
shiny:abc123

【问题讨论】:

  • 使用锚点:^([a-zA-Z][\w.]+|[0-9][0-9_.]*[a-zA-Z]+[\w.]*):(.*)$
  • @anubhava ^ 和 $ 不会工作,因为我在哪里搜索我的正则表达式。
  • 能否请edit 提供一些示例输入和输出?你用的是什么语言?
  • @4castle 在 vb.net 中执行此操作,但不应相关。
  • @4castle 甜蜜!这样可行!将其添加为 answe 与带有 ^ 和 $ 的正则表达式结合并不接受它

标签: regex vb.net


【解决方案1】:

在正则表达式的开头和结尾添加锚点 ^$ 将强制匹配从字符串的开头到结尾发生。

^([a-zA-Z][\w.]+|[0-9][0-9_.]*[a-zA-Z]+[\w.]*):(.*)$

如果您随后激活Multiline mode,它将使锚点在每条的开头和结尾处匹配。

Regex101 Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 2011-03-11
    • 2017-01-07
    相关资源
    最近更新 更多