我正在使用看起来像这样的数据:
{"score":0,"compare":0,"words":["book","planet","sun","science"],"words":[],"good":[],"bad":[]}
{"score":-1,"compare":0,"words":["book","planet","sun","science"],"words":[],"good":[],"bad":[]}
{"score":1,"compare":0,"words":["book","planet","sun","science"],"words":[],"good":[],"bad":[]}
我感兴趣的唯一信息是"得分":(可以是正面的也可以是负面的)。
由于我正在使用如上所示的数千行,我试图仅使用regular expression
提取我感兴趣的分数信息。
例如,我查阅了各种帖子,例如here,here和here,但似乎没有一个帖子可以解决我的问题。
我用它们来尝试编写自己的正则表达式。到目前为止,我已经尝试过以下内容:
(?!"score":(-)?[0-9])
^(?!"score":(-)?[0-9].*
(.(?!"score":(-)?[0-9]))*
但是这些示例中的每一个都选择 ALL 信息,包括我感兴趣的内容。
如何修改这些正则表达式以达到我想要的结果,即:
"score":0
"score":-1
"score":1
答案 0 :(得分:1)
您的正则表达式无法正常工作:
(?!"score":(-)?\[0-9\])
匹配未跟随false
^(?!"score":(-)?\[0-9\].*)
匹配行尾的空格(.(?!"score":(-)?\[0-9\]))*
匹配每个符号,但开头为"score":\d+
。您可以使用
{
请参阅demo
替换为.*("score":[-+]?\d*\.?\d+).*
。
如果您不需要浮点数支持,请使用
$1
请参阅another demo
主要概念是匹配所有行并捕获我们需要的子串(.*("score":[-+]?\d+).*
)。然后,我们在替换字符串中恢复捕获的文本。
下面,
"score":<number>
- 匹配除换行符之外的任何数量的任何字符.*
- 匹配
("score":[-+]?\d*\.?\d+)
- "score":
字面意思"score":
- 文字[+-]?
或+
(您可以保留 - 自行调整)-
匹配浮点数(没有千位分隔符)
或\d*\.?\d+
- 匹配一个或多个数字的序列。答案 1 :(得分:0)