【问题标题】:Python regex for unenclosed quotation marks [duplicate]未封闭引号的Python正则表达式[重复]
【发布时间】:2011-10-09 00:05:28
【问题描述】:

可能重复:
Split a string by spaces — preserving quoted substrings — in Python

给定以下字符串:

term1 term2 "the second term has spaces" term3 bad term 4

什么正则表达式会给我这个列表:

["term1", "term2", "the second term has spaces", "term3", "bad", "term", "4"]

【问题讨论】:

  • 所以,这家伙想知道括号而不是引号。但是,由于可能的递归,正则表达式并不是真正的工具。有关更多信息,请参阅 this SO questionthis SO question。但是,如果您不关心其中的复杂性,而只是想要描述的场景,那么这些可能有点矫枉过正。
  • 如果您不需要正则表达式,我建议您根据引号将其分成几部分,然后用空格分隔符将字符串的剩余部分分开,然后放引用一切。无论如何,这似乎比使用正则表达式更容易。
  • 似乎这个问题已经在别处得到了回答:stackoverflow.com/questions/79968/…
  • @Nightfirecat 这不是一个简单的方法:'"test test" test test "test test"'.split('"')'test test "test test" test test'.split('"') 都会留下 3 个未加引号的“测试测试”,并带有一些额外的空格和(在第一种情况下)空字符串,所以只分解那些一开始没有被引用的不是那么简单。

标签: python regex


【解决方案1】:

对于您的简单示例,这可以正常工作:

import re
quotestring = 'term1 term2 "the second term has spaces" term3 bad term 4'
# uses a lookahead and lookbehind to check for quoted strings
stringlist = re.findall(r'((?<=\").+(?=\")|\w+)', quotestring)
print(stringlist) # works on Python 2 or 3

或者,来自链接的帖子:

import shlex
quotestring = 'term1 term2 "the second term has spaces" term3 bad term 4'
stringlist = shlex.split(quotestring)
print(stringlist)

【讨论】:

    猜你喜欢
    • 2015-06-06
    • 2017-12-09
    • 2019-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 2019-02-08
    • 1970-01-01
    相关资源
    最近更新 更多