Regex会删除Python中存在的两个撇号



我刚加入Regex,但几乎完成了我的文本挖掘脚本。只有一件事失败了:我试图删除单词之间的撇号,如果它们存在的话。我正在使用re.sub。

例如:

  • "苹果"需要成为苹果
  • "apple"必须是apple
  • "[苹果]"必须是[苹果]
  • "(苹果("必须是(苹果(

然而:苹果需要保持苹果的,因为只有一个撇号。

当中间有一个单词时,我如何选择两个撇号,以便用resub删除它们?每次尝试我都会删除整个字符串!希望有人能帮忙。

我的代码如下:

str_o=''Apple''
str_o_a = re.sub(r"'(.*?)'","", str_o) 

我有一个更简单的想法:用空白分隔,修剪前导和尾随撇号,用空白连接。避免了必须编写正则表达式,并处理诸如";她是她妈妈的女儿;。

text = "She's 'her' mother's daughter"
text = ' '.join([word.strip("'") for word in text.split()])
print(text)
# She's her mother's daughter

正则表达式中使用括号的目的可能是捕获要保留的字符串。这个成语看起来像

str_o_a = re.sub(r"'([^']*)'", r"1", str_o)

为了在参数中保留反斜杠,您也需要在替换处使用一个原始字符串(否则您将用文字字符串"x01"替换(。

还要注意使用否定字符类而不是非贪婪的"非贪婪"字符类的偏好;匹配任何东西";通配符。

最新更新