删除指定字符串

时间:2015-09-09 08:47:15

标签: regex regex-negation regex-lookarounds

我正在使用看起来像这样的数据:

{"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提取我感兴趣的分数信息。

例如,我查阅了各种帖子,例如hereherehere,但似乎没有一个帖子可以解决我的问题。

我用它们来尝试编写自己的正则表达式。到目前为止,我已经尝试过以下内容:

(?!"score":(-)?[0-9])

^(?!"score":(-)?[0-9].*

(.(?!"score":(-)?[0-9]))*

但是这些示例中的每一个都选择 ALL 信息,包括我感兴趣的内容。

如何修改这些正则表达式以达到我想要的结果,即:

"score":0
"score":-1
"score":1

2 个答案:

答案 0 :(得分:1)

您的正则表达式无法正常工作:

  1. (?!"score":(-)?\[0-9\])匹配未跟随false
  2. 的每个符号前的空格
  3. ^(?!"score":(-)?\[0-9\].*)匹配行尾的空格
  4. (.(?!"score":(-)?\[0-9\]))*匹配每个符号,但开头为"score":\d+
  5. 您可以使用

    {

    请参阅demo

    替换为.*("score":[-+]?\d*\.?\d+).*

    如果您不需要浮点数支持,请使用

    $1

    请参阅another demo

    主要概念是匹配所有行并捕获我们需要的子串(.*("score":[-+]?\d+).* )。然后,我们在替换字符串中恢复捕获的文本。

    下面,

    • "score":<number> - 匹配除换行符之外的任何数量的任何字符
    • .* - 匹配
      • ("score":[-+]?\d*\.?\d+) - "score":字面意思
      • "score": - 文字[+-]?+(您可以保留 - 自行调整)
      • -匹配浮点数(没有千位分隔符) 或
      • \d*\.?\d+ - 匹配一个或多个数字的序列。

答案 1 :(得分:0)

我在这里创建了一个开发示例: https://regex101.com/r/yL7hA9/1

它是:

"score":(-)?[0-9]+

随时修改您的要求。