【问题标题】:Regex in python splitting stringspython中的正则表达式拆分字符串
【发布时间】:2020-07-16 20:47:37
【问题描述】:

我有一个这样的字符串

SELECT [Orders$].[Category] AS [Category],&#13,&#10,  [Orders$].[City] AS [City],&#13,&#10,  [Orders$].[Country] AS [Country],&#13,&#10,  [Orders$].[Customer ID] AS [Customer ID],&#13,&#10,  [Orders$].[Customer Name] AS [Customer Name],&#13,&#10,  [Orders$].[Discount] AS [Discount],&#13,&#10,  [Orders$].[Profit] AS [Profit],&#13,&#10,  [Orders$].[Quantity] AS [Quantity],&#13,&#10,  [Orders$].[Region] AS [Region],&#13,&#10,  [Orders$].[State] AS [State],&#13,&#10,  [People$].[Person] AS [Person],&#13,&#10,  [People$].[Region] AS [Region (People)]&#13,&#10,FROM [Orders$]&#13,&#10,  INNER JOIN [People$] ON [Orders$].[Region] = [People$].[Region]

我只想动态获取 Category 和 city 而无需对 word 进行硬编码。我应该使用什么样的模式?这样我会将这两个值存储在一个数组中,该数组在下游程序中循环。

我尝试拆分文本

colName = re.split("\W+", result)

['SELECT',
 'Orders',
 'Category',
 'AS',
 'Category',
 '13',
 '10',
 'Orders',
 'City',
 'AS',
 'City',
 '13',
 '10',

它给了我整个字符串,现在不知道如何进行。有人可以帮忙吗??

谢谢

【问题讨论】:

  • 那么当使用findall得到category和city时,你怎么知道哪个是哪个?

标签: python regex split


【解决方案1】:

不要使用拆分,使用re.findall()

matches = re.findall(r'\bAS\s+\[(.+?)\]', yourString)

你想要的单词在group(1) 中的每个匹配matches

【讨论】:

  • 非常感谢您的快速回复,它成功了:)
  • 我只有 9 个列,但我在实际选择查询问题中编辑了 12 个列。你能看看吗。抱歉打扰......谢谢我得到的是客户 ID、客户名称和地区(人)
  • 你的一些列名有空格,我的正则表达式假设它们只是字母数字
  • 非常感谢它的工作,你是帮助他人的伟大天才:)。
【解决方案2】:

不确定我是否正确理解了您的问题,看来您可以继续:

>>> category = colName[2]
>>> city = colName[8]

您可以打印检查:

>>> print(category, city)
Category City

【讨论】:

  • 硬编码特定索引似乎不是很健壮。
  • 你是绝对正确的@Barmar,我只是认为对于问题中给出的示例来说这可能是一个便宜的解决方案,这似乎是一个固定格式的查询。您答案中的正则表达式肯定更可靠。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-06
  • 2013-04-26
相关资源
最近更新 更多