【问题标题】:Regex: Find strings without character正则表达式:查找没有字符的字符串
【发布时间】:2018-11-20 22:09:39
【问题描述】:

我构建匹配的正则表达式 2 个字母或 2 个字母后跟 '/' 和接下来的 2 个字母,例如:

rt bl/ws se gn/wd wk bl/rt

/^(((\s+)?[a-zA-Z]{2}(\/[a-zA-Z]{2})?)(\s+|$))+$/i

而且没有问题。 我遇到的下一个问题是匹配所有不包含“/”字符的“单词”。 并用“/”分隔的重复值替换所有匹配项。对于上述示例,例外输出应为:

rt/rt bl/ws se/se gn/wd wk/wk bl/rt

我尝试了一段时间,但没有成功。你能帮我解决这个问题吗?

更新 1:

我已经开始使用匹配不包含“at”的单词的正则表达式

(\b((?!(at))\w)+\b)

Et the and I want to replace match elements with python like

re.sub(r'(\b((?!(at))\w)+\b)', r'\1/\1', text)

但首先必须找到正确的元素...

【问题讨论】:

  • 向我们展示您的尝试,这将有助于确定您的问题。
  • 另外,如果您提到您正在使用正则表达式的编程语言,那就太好了。
  • 您的正则表达式非常复杂。你可以简化它。例如,(\s+)?\s* 相同。也可以看看\w\b
  • @Wiktor Stribiżew OP 从不排除工作将由其他人完成。这个论坛有没有寻求帮助的地方不对?
  • 那么你可以使用re.sub(r'(?<!\S)[^\W\d_]+(?!\S)', r'\g<0>/\g<0>', s)。或re.sub(r'(?<!\S)([^\W\d_]+)(?!\S)', r'\1/\1', s)。要排除 at 单词匹配,请使用 re.sub(r'(?<!\S)(?!at(?!\S))([^\W\d_]+)(?!\S)', r'\1/\1', s)

标签: javascript regex regex-negation


【解决方案1】:

在 python 中你可以这样做:

re.sub(r'(?:(?<=^)|(?<= ))(\w+)(?= )',r'\1/\1','rt bl/ws se gn/wd wk bl/rt')

'rt/rt bl/ws se/se gn/wd wk/wk bl/rt'

【讨论】:

    【解决方案2】:

    如果您使用的正则表达式支持负向查找,则此正则表达式应该会找到您要替换的字符串:

    (?&lt;!\/)([A-Za-z]{2}(?!\/))

    (?&lt;!\/) - 确保匹配后没有/
    ([A-Za-z]{2} 查找两个字母字符
    (?!\/)) 确保没有尾随/

    在 Python 中你会这样使用它:

    print(re.sub(r'(?<!\/)([A-Za-z]{2}(?!\/))',r'\1/\1','rt bl/ws se gn/wd wk bl/rt'))
    

    输出:

    rt/rt bl/ws se/se gn/wd wk/wk bl/rt
    

    Demo on rextester

    在 PHP 中你可以这样使用它:

    $str = 'rt bl/ws se gn/wd wk bl/rt';
    echo preg_replace('/(?<!\/)([A-Za-z]{2}(?!\/))/', '$1/$1', $str);
    

    输出:

    rt/rt bl/ws se/se gn/wd wk/wk bl/rt
    

    Demo on 3v4l.org

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-18
      • 2021-09-15
      • 1970-01-01
      • 2017-07-04
      • 2016-05-16
      • 2012-05-12
      相关资源
      最近更新 更多