【问题标题】:Regex match any setence containing ^ except those that start with \正则表达式匹配任何包含 ^ 的语句,但以 \ 开头的语句除外
【发布时间】:2022-01-17 18:46:37
【问题描述】:

我想在我的文本中添加一个分隔符 -- $ -- 到每个包含指数 -- ^ -- 运算符的句子,但我不想在以我的指数中包含一个反斜杠。我尝试使用((?!\\\w+)\w+)\^(\w+) 正则表达式没有成功。

input what I want what I got
foo^2 $foo^2$ $foo^2$
\foo^2 \foo^2 $foo^2$

我的代码:

from re import sub

sentence = """foo^2 
 \bar, \bar^3 
bar 
\foo 
 \bar
 foo^5 
"""

sub(r'((?!\\\w+)\w+)\^(\w+)', '$\\1^\\2$', sentence)

给出以下输出:

'$foo^2$ \n \x08ar, \x08$ar^3$ \nbar \n\x0coo \n \x08ar\n $foo^5$ \n'

【问题讨论】:

  • 反斜杠总是在字符串的开头吗?
  • 是的,@WaisKamal
  • 你需要使用否定的look-behind断言,并且还要匹配单词边界:例如r'(?<!\\)\b(\w+)\^(\w+)\b'。 (请注意,您的示例字符串必须是 原始字符串,否则它将包含嵌入式控制字符,例如 \b\f)。
  • 就是这样,@ekhumoro。
  • @LucasAlmeidaCarotta 还有一点:输入可以包含转义的反斜杠吗?如果是这样,那可能需要特殊处理。 (例如,\\foo^2 之类的东西)。

标签: python regex regex-lookarounds


【解决方案1】:

你可以使用

import re
texts = [r'foo^2', r'\foo^2']
for text in texts:
    print(re.sub(r'(?<!\\)((?:\\\\)*\b\w+)\^(\w+)', r'$\1^\2$', text))

请参阅Python demo

Output:
$foo^2$
\foo^2

请参阅regex demo详情

  • (?&lt;!\\) - 前面没有紧跟 aa \ char 的位置
  • ((?:\\\\)*\b\w+) - 第 1 组:零个或多个 \\ 字符串出现、一个单词边界和一个或多个单词字符
  • \^ - 一个 ^ 字符
  • (\w+) - 第 2 组:一个或多个单词字符。

【讨论】:

    【解决方案2】:

    @Lucas Almeida Carotta,这是你想要的吗?

    sentence = r"""foo^2 
     \bar, \bar^3 
    bar 
    \foo 
     \bar
     foo^5 
    """
    
    new_words = []
    
    new_words = []
    
    for word in sentence.split():
        if (re.search('^\\\\', word)):
            new_words.append(word)
            #print(word.replace('\\',''))
        else:
            #print('$'+word+'$')
            new_words.append('$'+word+'$')
    

    输出:

    print(new_words)
    
    ['$foo^2$', '\\bar,', '\\bar^3', '$bar$', '\\foo', '\\bar', '$foo^5$']
    

    【讨论】:

    • 我解决了这个问题。我希望显示反斜杠。
    • 我编辑了我的答案。
    • @VictorSaraivaRocha 您的解决方案在没有的地方添加了“\”。此外,它会去除所有空白,因此无法重建原始文本。
    猜你喜欢
    • 1970-01-01
    • 2020-08-26
    • 2019-01-02
    • 2013-09-13
    • 1970-01-01
    • 2016-01-16
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多