regex 如何删除包含单词撇号?

eh57zj3b  于 2023-08-08  发布在  其他
关注(0)|答案(2)|浏览(110)

假设我有一个列表,内容如下:

list = [" I wish I was Alex's best 'friend' "]

字符串
我想删除包含friend的撇号,但不删除Alex's中使用的撇号,如果我像这样尝试使用re.sub:

list = re.sub('\'\')', '', list)


它删除了所有我不想要的撇号,我如何才能做到这一点,使结果是:

list = [" I wish I was Alex's best friend " ]

egdjgwm8

egdjgwm81#

另一种方法:

re.sub(r"(?<![a-zA-Z])'(.*?)'(?![a-zA-Z])", r'\1', list[0])

字符串
这将查找一个撇号,后面跟任何东西,后面跟另一个撇号,只要在第一个撇号之前或最后一个撇号之后没有字母。

fivyi3re

fivyi3re2#

假设撇号一次只在一个单词周围,而不是一个完整的句子,你可以这样使用:

re.sub(r"'(\w+)'", "\1", your_string)
# your_string can be strings from your list if you iterate over it

字符串
这将捕获被撇号包围的单词,并删除这些撇号。因此,如果只有一个撇号,如Alex'sit's,它不会删除它们。
请注意,这并不总是有效的,例如,如果Alex's周围有撇号,则无法知道要删除哪个撇号(有,但它不会被此正则表达式处理)

更新

你可以使用一个greedy(> 0)量词和一个alternate语句来删除Alex's周围的撇号:

re.sub(r"'((?:\w|')+)'", "\1", your_string)

相关问题