Python:在最后一个小写字母处拆分字符串
问题描述:
我想在字符串中的最后一个小写字母处拆分字符串。字符串将总是至少有一个小写字母。在最后一个小写字母后面总会有一个空格。字符串中可能有数字。Python:在最后一个小写字母处拆分字符串
这是我想出来的最好的:
s = 'Arrived at location NEWARK NJ US'
for i, c in enumerate(reversed(s)):
if c.islower():
d = len(s) - i
break
a = s[:d]
b = s[d+1:]
是否有一个更简单或更Python的方式?也许是一个可读的正则表达式?
答
通过re.split
。
>>> s = 'Arrived at location NEWARK NJ US'
>>> re.split(r'(?<=[a-z])\s+(?=[^a-z]*$)', s)
['Arrived at location', 'NEWARK NJ US']
-
(?<=[a-z])
为小写字母后,看起来。 -
\s+
,那么符合下列一个或多个空格字符, - 只有
- 它后面
(?=..)
-
[^a-z]*
任何字符,但一个小写字母,零次或多次的不是。 -
$
紧接着一行结束。所以它与紧接在最后一个小写字母后面的空格相匹配。
OR
>>> s = "Arrived at location NEWARK NJ US"
>>> part1, part2 = re.findall(r'(.*[a-z])\s+(.*)', s)[0]
>>> part1
'Arrived at location'
>>> part2
'NEWARK NJ US'
OR
>>> s = "Arrived at location NEWARK NJ US"
>>> part1, part2 = re.search(r'(.*[a-z])\s+(.*)', s).groups()
>>> part1
'Arrived at location'
>>> part2
'NEWARK NJ US'
OR
re.split将返回定界符如果分隔符是一个捕获GR内本牛津大学出版社。
>>> part1, part2 = [i for i in re.split(r'(.*[a-z])\s+', s) if not i == '']
>>> part1
'Arrived at location'
>>> part2
'NEWARK NJ US'
答
关于什么:
s = 'Arrived at location NEWARK NJ US'
pos = re.search("[a-z]", s[::-1]).start()
a, b = s[:-pos], s[1 - pos:]
结果为a
,b
:
Arrived at location
NEWARK NJ US
的想法是通过搜索字符串逆转找到最后小写字母的位置。
如果你希望最后一个小写字母后的多个空格:
start, end = re.search("\s+[a-z]", s[::-1]).span()
a, b = s[:1 - end], s[-start:]
+2
比Avinash的答案更可读 – foosion 2015-03-13 11:57:27
+1
@foosion检查我的更新.. – 2015-03-13 12:28:26
可读在旁观者:-) – foosion 2015-03-13 11:32:53
@foosion的眼睛:那是正则表达式为您服务。 – 2015-03-13 11:34:20
@MartijnPieters也许我应该在Q中说“简单的正则表达式”,但你可能会给出相同的评论。 :-) – foosion 2015-03-13 11:36:32