【问题标题】:String manipulation: How isolate a word in a dictionary字符串操作:如何隔离字典中的单词
【发布时间】:2019-02-06 17:56:31
【问题描述】:

我对@9​​87654321@ 还很陌生。我想知道你将如何从dictionary 中的这个字符串中提取'FRI-AA-02'

{ 
   "layers": {},
   "definitionExpression": "(UPPER(Auto_Trash_Route) = UPPER('FRI-AA-02'))"
}

更多示例:

{
"id": "1",
"layers": {}"
"definitionExpression": "(UPPER(Auto_Yard_Route) = UPPER('FRI-AY-01'))"
}


{
"id": "4",
"layers": {}"
"definitionExpression": "(UPPER(Auto_Yard_Route) = UPPER('THU-AY-23'))"
}

【问题讨论】:

  • 有很多方法,你能否再给我们几个例子,以便我们了解你想要的模式
  • 我正在寻找最简单的方法来拆分字符串以获得“FRI-AA-02”。
  • 我认为使用正则表达式是正确的方法。您只需要向我们解释您在寻找什么。您是在寻找位于 UPPER('...') 中的单词,还是在寻找由三个字母 a 减号后跟两个字母另一个减号和两个数字组成的单词?或者除了 FRI-AA-02 部分之外,字符串看起来总是一样的吗?在这种情况下,您可以切断其余部分。告诉我,我会告诉你一个方法。如果您确信 FRI-AA-02 旁边的两个引号是字符串中出现的唯一引号,您可以采用 jpps 解决方案。
  • 后者。 FRI-AA-02 这个词是我正在寻找的东西。当用户选择不同的选项然后将其放入我收集的 json 文件中时,字符串会发生变化。
  • 如果您在 Google 上搜索“Python 字符串处理”这个短语,您会发现教程可以比我们在此处的答案中更好地解释它。

标签: python string python-2.7 dictionary


【解决方案1】:

你也可以使用:

使用子字符串:

d= { 
   "layers": {},
   "definitionExpression": "(UPPER(Auto_Trash_Route) = UPPER('FRI-AA-02'))"
}

d['definitionExpression'][34:-3]
#returns 'FRI-AA-02'

使用正则表达式:

import re
re.findall(r"(?<=')[^']+(?=')",d['definitionExpression'])

使用拆分:

d['definitionExpression'].split("'")[1]

使用正则表达式的格式:

re.findall(r"\w{3}-\w{2}-\d{2}",d['definitionExpression'])

【讨论】:

  • 再添加一个例子,如果这说明了什么。
  • 为什么正则表达式会有帮助?它更快吗?
  • 正则表达式是一种在字符串中查找内容的好方法,如果你能说出它的样子 FRI-AA-02 你知道它的三个字母 a 减两个字母一个减号和两个数字。您可以使用 reg ex 查找一个看起来像这样的单词,例如 THU-BB-33
  • 或正则表达式可以帮助您在某些环境中找到东西。就像在你的情况下,FRI-AA-02 被“UPPER('”和“')”包围,你可以使用正则表达式来找到一个被它包围的字符串。
  • 好的,感谢您的全面回答。 split 会比使用正则表达式更快吗?我有一个庞大的数据集供我使用,我会关心性能时间。
【解决方案2】:

您还可以使用正则表达式提取单引号之间的任何内容:

>>> import re
>>> 
>>> d = { 
...    "layers": {},
...    "definitionExpression": "(UPPER(Auto_Trash_Route) = UPPER('FRI-AA-02'))"
... }
>>> 
>>> re.findall(r"'([^']*)'", d['definitionExpression'])
['FRI-AA-02']

如果您有其他必须找到多个单引号子字符串的情况,这可能很有用:

>>> import re
>>>
>>> s = "'a', 'b'"
>>> re.findall(r"'([^']*)'", s)
['a', 'b']

【讨论】:

  • "re.findall(r"'([^']*)'", s)" 实际上会包含引号。试试“(?
  • 我无法复制这个,你能提供一个包含引号的例子吗?
  • re.findall(r"(?
  • 与你的字符串一样,它也返回“,” xD,但我认为这与实际问题没有问题
  • 感谢您的回答。
猜你喜欢
  • 2019-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-09
  • 1970-01-01
  • 1970-01-01
  • 2019-01-05
相关资源
最近更新 更多