python在所有空格和标点处重新拆分,撇号除外
我想用所有空格和标点符号分割字符串,撇号除外。最好是单引号仍然用作分隔符,除非它是撇号。我还想保留delimeters。 示例字符串python在所有空格和标点处重新拆分,撇号除外,python,string,split,re,apostrophe,Python,String,Split,Re,Apostrophe,我想用所有空格和标点符号分割字符串,撇号除外。最好是单引号仍然用作分隔符,除非它是撇号。我还想保留delimeters。 示例字符串 words=“”你好,我的名字是‘乔’。你的名字是什么?“ 这是我迄今为止的re模式splited=re.split(r“[^'-\w]”,words.lower()) 我尝试在“^字符后添加一个引号,但它不起作用 我想要的输出是这个splitted=[你好,我的名字是,joe,what's,your's]我喜欢regex高尔夫 words=”““你好,我叫‘乔’
words=“”你好,我的名字是‘乔’。你的名字是什么?“
这是我迄今为止的re模式splited=re.split(r“[^'-\w]”,words.lower())
我尝试在“^字符后添加一个引号,但它不起作用
我想要的输出是这个splitted=[你好,我的名字是,joe,what's,your's]
我喜欢regex高尔夫
words=”““你好,我叫‘乔’。你的名字是什么?”
splitted=re.findall(r“\b(?:\w'\w |\w)+\b”,字)
括号中的部分是一个组,它匹配由字母包围的撇号或单个字母
编辑:
这是更灵活的:
re.findall(r”\b(?:(?在拆分后只处理列表而不首先考虑它们可能更简单:
words=“”你好,我的名字是‘乔’。你的名字是什么
>>>split_words=re.split(r“[,.!?]”,words.lower())#添加要拆分的标点符号
>>>分裂词
[‘你好’、‘我的’、‘名字’、‘是’、‘乔’、‘是什么’、‘你的’]
>>>[word.strip(“”)表示拆分单词中的单词]
[“你好”、“我的”、“名字”、“是”、“乔”、“什么”、“你的”]
一个选项是使用lookarounds在所需位置拆分,并使用要保留在拆分中的捕获组
拆分后,可以从结果列表中删除空条目
\s+|(?<=\s)'|'(?=\s)|(?<=\w)([,.!?])
输出
['hello', 'my', 'name', 'is', 'joe', '.', "what's", "your's"]
连字符表示字符类中的范围(例如
a-z
),因此您需要对其进行转义[^'\-\w]
,或者将其放在末尾[^'\w-]
。不能完全处理双收缩的情况:):words=“这根本不起作用“
很抱歉,我忘了添加一个问题,我也想保留delimeters。有什么方法可以这样做吗?我不知道你所说的“保留delimeters”是什么意思保留delimeters我的意思是我想保留字符串中用于拆分的部分。因此”“嗨,我的名字是joe!”“将等于[“嗨”,“我的”,“我的名字”,“是”“joe”和“joe”!“所以你想保留除空格以外的所有内容。不要认为你可以用一个正则表达式来完成。你只需在空格上拆分(re.split(r”\s+”,words)
)然后处理结果。很抱歉,我忘了在问题中添加我也想保留delimeters。有什么方法可以做到这一点吗?
['hello', 'my', 'name', 'is', 'joe', '.', "what's", "your's"]