ai didi

python - 为最后一个空格拆分字符串的最佳方法

转载 作者:太空宇宙 更新时间:2023-11-03 14:23:18 24 4
gpt4 key购买 nike

我想知道用空格分隔字符串的最佳方法是字符串中不在 [、{、( 或 " 内的最后一个空格。例如,我可以:

a = 'a b c d e f "something else here"'
b = 'another parse option {(["gets confusing"])}'

对于 a 它应该解析成 ['a', 'b', 'c', 'd', 'e', 'f'], ["something else here here"]< br/>b 应该解析为 ['another', 'parse', 'option'], ['([{"gets confusing"}])']

现在我有这个:

def getMin(aList):  
min = sys.maxint
for item in aList:
if item < min and item != -1:
min = item
return min

myList = []
myList.append(b.find('['))
myList.append(b.find('{'))
myList.append(b.find('('))
myList.append(b.find('"'))
myMin = getMin(myList)
print b[:myMin], b[myMin:]

我确信有更好的方法来做到这一点,我愿意接受所有建议

最佳答案

匹配与拆分

有一个简单的解决方案。关键是要明白匹配和拆分是同一枚硬币的两个面。当您说“全部匹配”时,这意味着“拆分我不想匹配的内容”,反之亦然。我们将匹配而不是拆分,您最终会得到相同的结果。

简化的简单版本

让我们从最简单的正则表达式开始,这样您就不会被太长的东西吓到:

{[^{}]*}|\S+

这匹配了你的第二个字符串的所有项目——就像我们正在拆分一样(参见 demo)

  • | 交替的左侧匹配完整的 {braces} 集。
  • | 的右侧匹配任何不是空白字符的字符。

就这么简单!

完整的正则表达式

我们还需要匹配"full quotes"(full parentheses)[full brackets]。没问题:我们只是将它们添加到交替中。为清楚起见,我将它们放在一个非捕获组 (?: 中,以便 \S+ 自行弹出,但没有必要。

(?:{[^{}]*}|"[^"]*"|\([^()]*\)|\[[^][]*\])|\S+

参见 demo .

注意潜在的改进

  • 我们可以用接受转义引号的正则表达式替换带引号的字符串
  • 我们可以用递归表达式替换大括号、方括号和圆括号表达式以允许嵌套构造,但您必须使用 Matthew Barnett 的(很棒的)regex 模块而不是 re
  • 该技术与一个简单而漂亮的技巧有关Match (or replace) a pattern except when...

如果您有任何问题,请告诉我!

关于python - 为最后一个空格拆分字符串的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24397028/

24 4 0
文章推荐: python - 如何相对于引用系移动蛋白质坐标
文章推荐: python - spaCy GoldParse 中的 KeyError
文章推荐: python - 在插槽中使用 weakref 继承类
文章推荐: python - 如何在 matplotlib 散点图中为子组添加第二个图例
太空宇宙
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
全站热门文章
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com