2013-07-12 85 views
8

我有一个字符串:鸿沟串

"""Hello. It's good to meet you. 
My name is Bob.""" 

我试图找到这个分成的周期和换行分隔列表的最佳方式:

["Hello", "It's good to meet you", "My name is Bob"] 

我很确定我应该使用正则表达式,但是,没有经验与他们,我正在努力弄清楚如何做到这一点。

回答

17

你不需要正则表达式。

>>> txt = """Hello. It's good to meet you. 
... My name is Bob.""" 
>>> txt.split('.') 
['Hello', " It's good to meet you", '\nMy name is Bob', ''] 
>>> [x for x in map(str.strip, txt.split('.')) if x] 
['Hello', "It's good to meet you", 'My name is Bob'] 
1
>>> s = """Hello. It's good to meet you. 
... My name is Bob.""" 
>>> import re 
>>> p = re.compile(r'[^\s\.][^\.\n]+') 
>>> p.findall(s) 
['Hello', "It's good to meet you", 'My name is Bob'] 
>>> s = "Hello. #It's good to meet you # .'" 
>>> p.findall(s) 
['Hello', "#It's good to meet you # "] 
+0

在''“你好。 #很高兴见到你#。你的正则表达式catch''['Hello','很高兴见到你']'' – eyquem

2

对于你的榜样,就足够了分割点上,可以跟空格(而忽略空的结果):

>>> s = """Hello. It's good to meet you. 
... My name is Bob.""" 
>>> import re 
>>> re.split(r"\.\s*", s) 
['Hello', "It's good to meet you", 'My name is Bob', ''] 

在现实生活中,你必须处理Mr. OrangeDr. GreeneGeorge W. Bush,但...

0

您可以使用此分割

re.split(r"(?<!^)\s*[.\n]+\s*(?!$)", s) 
0

矿:

re.findall('(?=\S)[^.\n]+(?<=\S)',su)