我刚加入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"
替换(。
还要注意使用否定字符类而不是非贪婪的"非贪婪"字符类的偏好;匹配任何东西";通配符。