Python 在逗号和#x27上拆分字符串;和';s、 &x27;或';s
我想从自然编写的字符串列表转到python列表 样本输入:Python 在逗号和#x27上拆分字符串;和';s、 &x27;或';s,python,regex,string,tokenize,Python,Regex,String,Tokenize,我想从自然编写的字符串列表转到python列表 样本输入: s1 = 'make the cake, walk the dog, and pick-up poo.' s2 = 'flour, egg-whites and sand.' 输出: split1 = ['make the cake', 'walk the dog', 'pick-up poo'] split2 = ['flour', 'egg-whites', 'sand'] 我想在删除拆分和空字符串的同时拆分逗号(和句点)、“a
s1 = 'make the cake, walk the dog, and pick-up poo.'
s2 = 'flour, egg-whites and sand.'
输出:
split1 = ['make the cake', 'walk the dog', 'pick-up poo']
split2 = ['flour', 'egg-whites', 'sand']
我想在删除拆分和空字符串的同时拆分逗号(和句点)、“and”和“or”上的字符串。由于牛津逗号的使用缺乏标准化,我不能只使用逗号
我尝试了以下方法:
重新导入
如果x不在['','','',''中,则在re.split('([A-Za-z-]+)',s1)中的x的[x.strip()
其中:
['make the cake', 'walk the dog', 'and pick-up poo']
很接近。但是对于s2
它给出:
['flour', 'egg-whites and sand']
我可以跨元素进行一些后处理,以通过(and | or)
连续拆分元素,但我确实希望通过逗号集and和or来标记
我尝试了一些奇特的正则表达式拆分,以便对和
之类的内容进行负面展望,但它不想在这个词上拆分
[x.strip() for x in re.split('([A-Za-z -]+(?!and))', s2) if x not in ['', ',', '.']]
[x.strip() for x in re.split('([A-Za-z -]+(?!\band\b))', s2) if x not in ['', ',', '.']]
这也给了
['flour', 'egg-whites and sand']
我意识到有很多边缘案例,但我觉得我很接近,只是错过了一些小东西。你可以使用
\s*(?:\b(?:和|或)\b |[,.])\s*
看。详情:
-0+空格\s*
-一个完整的单词(?:\b(?:and | or)\b |[,.])
和
或
或
,或逗号/句点
-0+空格\s*
重新导入
rx=re.compile(r“\s*(?:\b(?:and | or)\b |[,.])\s*)
strings=[“做蛋糕,遛狗,捡粪便。”,“面粉,蛋白和沙子。”]
对于字符串中的s:
打印(列表(过滤器(无,接收拆分)
注意,逗号或句号通常在“跟随”或“用数字括起来”时被排除在外,您可以考虑用<代码> > [],(..d)< /代码>或<代码> [],(?)]替换<代码> [,] />代码>
\s*(?:\b(?:和|或)\b |[,.])\s*
详情如下:
-0+空格\s*
-一个完整的单词(?:\b(?:and | or)\b |[,.])
和
或
或
,或逗号/句点
-0+空格\s*
重新导入
rx=re.compile(r“\s*(?:\b(?:and | or)\b |[,.])\s*)
strings=[“做蛋糕,遛狗,捡粪便。”,“面粉,蛋白和沙子。”]
对于字符串中的s:
打印(列表(过滤器(无,接收拆分)
注意,逗号或句号通常在“跟随”或“用数字括起来”时被排除在外,您可以考虑用<代码> > [,](..d)< /代码>或<代码> [],(),替换< < > > /代码>(?)?
- 使用标点符号进行拆分
- 使用连词进行拆分
这将适用于您提供的两个测试用例我认为您需要通过以下步骤来处理此问题:
- 使用标点符号进行拆分
- 使用连词进行拆分
这将在您提供的测试用例中使用,而不是正则表达式,也可以考虑用逗号替换所有的目标令牌,然后基于逗号、丢弃空格进行拆分。而不是正则表达式,也可以考虑用逗号替换所有的目标令牌,然后基于逗号拆分,丢弃空白。s