Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用[value](type)格式解析句子_Python_Regex - Fatal编程技术网

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.']