re.split()在某些字符后不分割
问题描述:
我想分割一个字符串,不管我做什么,字符串在某些字符后不分裂,不仅空间没有任何作用(为其他字符分割) 。我正在学习're'模块,所以你能更精确吗?谢谢。re.split()在某些字符后不分割
import re
String = "Integrity Home Care has an opening on our Leadership Team for a Salaried Private Care Nursing Supervisor.TOoooooo"
print(re.split(r'\s*',String,re.I|re.M))
答
你传递re.I|re.M
(10)作为maxsplit
参数的值,所以经过十次停止分裂,就像你告诉它。
如果你不希望在一个值以通为maxsplit
,使用名为论据标志:
re.split(r'\s*', String, flags=re.I|re.M)
另一种选择是不是在传递标志作为参数,而是将它们包括在正则表达式本身。
re.split(r'(?im)\s*',String)
我都保留了不区分大小写的标志在这些例子中,但你的正则表达式不匹配,可能有情况下,反正任何字符,所以你可以离开它。
现在到正则表达式本身。 *
匹配零次或多次出现前面的模式。这与字符串中的任何地方都匹配,所以理论上字符串可以在任何地方分割,这就是为什么你会得到有关非空模式的警告。这些匹配被忽略,但最好使用+
,这意味着一个或更多的出现位置。
最后,我会不顾一切地提醒你可能只能使用String.split()
,它默认情况下会在空白处分割,所以你可能会废除正则表达式。
答
re.split(r'\s*',String,re.I|re.M)
必须是re.split(r'\s*',String,flags=re.I|re.M)
。第三个位置参数ro re.split
是片段的最大数量,您将其设置为re.I|re.M
,即10。
答
您也可以简单地从代码中删除re.I|re.M
。试试这个:
print(re.split(r'\s',String))
输出:
['Integrity', 'Home', 'Care', 'has', 'an', 'opening', 'on', 'our', 'Leadership', 'Team', 'for', 'a', 'Salaried', 'Private', 'Care', 'Nursing', 'Supervisor.TOoooooo']
三江源,你能告诉我为什么如re.I | re.M被10做到了将其转换为ASCII或类似的东西? 我在分割后得到这个警告: FutureWarning:split()需要一个非空的模式匹配。 return _compile(pattern,flags).split(string,maxsplit) –
're.I'为2且're.I'为8.这就是它们在're'模块中定义的方式。 8和2的按位“或”是10. – kindall
@HashikDonthineni更新了我的答案以解决这些问题。 – kindall