Python 用[value](type)格式解析句子
我想从一个给定的句子中解析和提取键值,该句子遵循以下格式:Python 用[value](type)格式解析句子,python,regex,Python,Regex,我想从一个给定的句子中解析和提取键值,该句子遵循以下格式: 我想在[1周](持续时间)内获得[samsung](品牌)以获得快乐。 我想将其转换为如下所示的拆分列表: [“我想要”、“三星:品牌”、“在”、“一周内:持续时间”、“快乐”] 我已尝试使用[或)拆分它: re.split('\[|\]|\(|\)',s) 它给出了输出: ['I want to get ', 'samsung', '', 'brand', ' within ', '1 week', '', 'dura
我想在[1周](持续时间)内获得[samsung](品牌)以获得快乐。
我想将其转换为如下所示的拆分列表:[“我想要”、“三星:品牌”、“在”、“一周内:持续时间”、“快乐”]
我已尝试使用[
或)
拆分它:
re.split('\[|\]|\(|\)',s)
它给出了输出:
['I want to get ',
'samsung',
'',
'brand',
' within ',
'1 week',
'',
'duration',
' to be happy.']
及
给出以下输出:
['I want to get ',
'samsung](brand) within ',
'1 week](duration) to be happy.']
感谢您的帮助
注意:这类似于stackoverflow内联链接,如果我们键入:
转到[此链接](http://google.com)
将其解析为链接。您可以使用两步方法:首先处理[…](…)
以根据需要进行格式化,并使用一些罕见/未使用的字符对其进行保护,然后使用该模式进行拆分
例如:
s = "I want to get [samsung](brand) within [1 week](duration) to be happy.";
print(re.split(r'⦅([^⦅⦆]+)⦆', re.sub(r'\[([^][]*)]\(([^()]*)\)', r'⦅\1:\2⦆', s)))
见
\[([^\][*])]\([^()]*])\
模式匹配
-a\[
字符[
-第1组(([^\][]*)
):除$1
和[
之外的任何0+字符]
-]\(
子字符串])(
-第2组(([^()]*)
):除$2
和(
之外的任何0+字符)
-a\)
字符)
([^⦅65376;]+)
模式只匹配任何…
子字符串,但在捕获时保留中间的字符串。作为第一步,我们拆分字符串,在第二步中修改字符串:
s = 'I want to get [samsung](brand) within [1 week](duration) to be happy.'
import re
s = re.split('(\[[^]]*\]\([^)]*\))', s)
s = [re.sub('\[([^]]*)\]\(([^)]*)\)', r'\1:\2', i) for i in s]
print(s)
印刷品:
['I want to get ', 'samsung:brand', ' within ', '1 week:duration', ' to be happy.']
您可以先替换
](
模式,然后拆分[)
字符
re.replace(“\)\[”,“:”).split(“\[\)”,s)
一种方法,使用带有lambda函数的re.split
:
sentence = "I want to get [samsung](brand) within [1 week](duration) to be happy."
parts = re.split(r'(?<=[\])])\s+|\s+(?=[\[(])', sentence)
processTerms = lambda x: re.sub('\[([^\]]+)\]\(([^)]+)\)', '\\1:\\2', x)
parts = list(map(processTerms, parts))
print(parts)
['I want to get', 'samsung:brand', 'within', '1 week:duration', 'to be happy.']
句子=“我想在[1周](持续时间)内获得[samsung](品牌)以获得快乐。”
parts=re.split(r')(?感谢您的回答,为什么您要放置
和
?@sid8491来分隔应该拆分的子字符串。
sentence = "I want to get [samsung](brand) within [1 week](duration) to be happy."
parts = re.split(r'(?<=[\])])\s+|\s+(?=[\[(])', sentence)
processTerms = lambda x: re.sub('\[([^\]]+)\]\(([^)]+)\)', '\\1:\\2', x)
parts = list(map(processTerms, parts))
print(parts)
['I want to get', 'samsung:brand', 'within', '1 week:duration', 'to be happy.']