在字符串外部拆分具有特定关键字的字符串,但不在字符串内部拆分



我有一个关于如何在这种情况下使用regex的问题(或者可以在Python中的任何解决方案中使用(:

我想要实现的是拆分冒号":"如果它在字符串外部,但如果它在串内部,则不要拆分它,就像下面的例子:

Regex我使用:(?!B"[^"]*):(?![^"]*"B)

string_to_split: str = '"A: String 1": "B: String 2": C: "D: String 4"'

Output > ["A: String 1", "B: String 2", 'C', "D: String 4"]

它达到了我的预期,但不知何故,如果我把任何东西放在一个不是字母或数字的字符串前面,它就不起作用了(不知何故的,如果字符串前面是符号/空格等,它就不会被regex分割(,就像这样:

string_to_split: str = '"A: String 1": "B: String 2": C: " D: String 4"'(字母"D"前的空格(

Output > ["A: String 1", "B: String 2": C: " D: String 4"]

我之所以这么做,是因为我想在Python中更轻松地使用regex(我在编码时几乎不使用regex(,所以我认为它可能必须使用前瞻性或前瞻性,但对它了解不多…如果你们能找到某种解决方案,我真的很感激,谢谢。。。

请尝试以下操作:

import re
pat='(?:[^:]*"[^"]+"[^:]*)|[^:]+'
str = '"A: String 1": "B: String 2": C: " D: String 4"'
m = [x.strip() for x in re.findall(pat, str)]
#m = [x.strip('" ') for x in re.findall(pat, str)]      # removes double quotes too
print(m)

输出:

['"A: String 1"', '"B: String 2"', 'C', '" D: String 4"']
  • 正则表达式CCD_ 6匹配除冒号之外的任何字符序列,同时允许在双引号中存在冒号
  • 正则表达式留下前导/尾随空格,然后将其删除通过CCD_ 7

如果您也想删除周围的双引号,请应用CCD_ 8。然后输出为:

['A: String 1', 'B: String 2', 'C', 'D: String 4']

您也可以使用TTP模板在不使用Regex的情况下解析所有数据。我举了一个例子,在开头放了一个空格,正如你在例子";D";。简而言之,您可以通过TTP创建自己的模板来轻松获取数据。

from ttp import ttp
import json
string_to_split = "  D: String 4"
ttp_template_0 ="""
{{D:}} {{String}} {{4}}
"""
parser_0 = ttp(data=string_to_split, template=ttp_template_0)
parser_0.parse()
#print result in JSON format
results_0 = parser_0.result(format='json')[0]
print(results_0)
#str to list **convert with json.loads
result_0 = json.loads(results_0)
print(result_0[0])
See the following parsed data:
[
{
"4": "4",
"D:": "D:",
"String": "String"
}
]
{'4': '4', 'D:': 'D:', 'String': 'String'}

最新更新