Python 正则表达式 - 解析字符串并用逗号和美元分隔

Python Regex -Parse a string and split it by comma & dollar

我有这样一句话-

stmt ="Is abc service accessible to sd, rc & odd in XYZ?"

而且我在字符串中有这样的实体 -

str_entities= "abc service$Service,sd,rc & odd$Processes, XYZ$Name"

我想将这些实体转换为 spacy json 格式,例如。其中包含每个实体的单词索引和该实体的标签

(stmt, {"entities": [(3,14, 'Service'),(30, 41, 'Processes'), (46, 48, 'Name')]})

我试过下面的正则表达式,但它只适用于一种情况,我想要一个可以提取任何编号的通用的。实体数。

re.findall("(.*.?)$(\S+),(.*.?)$(\S+)", str_entities)

我在许多文件中都有 10000 行这样的行,想要生成该格式以便我可以训练自定义 spacy 模型。我无法生成实体,因为逗号多次拆分实体,我失去了从 stmt 中查找索引的词。

我不确定我是否理解正确,但我会将 str_entities

分开
[^ ^,]+[^$]*$[^$^,]+

这样您就可以同时获得字符串和实体,它们仍然与 $ 符号结合在一起。之后,您可以使用 for 语句遍历元素并获取索引值。

enentity_list=[]
for e in re.findall("[^ ^,]+[^$]*$[^$^,]+", str_entities):
    entity_list.append((stmt.index(e.split('$')[0]),stmt.index(e.split('$')[0])+len(e.split('$')[0]),e.split('$')[1]))
json=(stmt,{"entities":entity_list})

你可以在https://rextester.com/LRKTPL77140

上试试