【问题标题】:reg ex pattern @ + word, excluding case if @@ before word正则表达式模式@+单词,不包括单词前@@的大小写
【发布时间】:2020-05-13 12:27:44
【问题描述】:

我目前正面临一些我在使用正则表达式时遇到的情况。

在我的例子中,我在 python 中使用字典中可用的其他字符串替换匹配的模式,如下所示:

re.sub(r"@(\w+)", lambda m: my_dict[m.group(1)], my_string)

我现在做什么:

pattern = "@(\w+)"

匹配“@”之后的整个单词。例如“foo@bar foo2”只匹配“bar”

  1. 我想添加一个“转义”符号,即如果我有@@,它不会考虑后面的单词。 因此“foo@@bar foo2”不应该匹配任何东西。

我该怎么做?

  1. 此外,当且仅当它们由“。”分隔时,我如何才能匹配整个单词和下一个单词。

例如,匹配“foo@bar.foo2.foo3 foo4”应该匹配“bar.foo2.foo3”。

谢谢

【问题讨论】:

  • 1. "(?:[^@]|^)@(\w+)" 2. "(?:[^@]|^)@([\w\.]+)"

标签: python regex


【解决方案1】:
  1. ('转义符号')

使用消极的向后看:

(?<!@)@(\w+)
  1. (用句点分隔的单词)

匹配一个单词后跟任意数量的前缀为句点的单词:

(\w+(\.\w+)*)

包装成一个正则表达式:

(?<!@)@(\w+(\.\w+)*)

演示here (Regex101).

【讨论】:

  • (?&lt;!@)@((\w+\.?)+)
  • @Dan 这将允许匹配以句点结尾,例如 foo. in @foo. bar
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-24
  • 1970-01-01
相关资源
最近更新 更多