【问题标题】:What is the Regex to capture only digits from some data什么是仅从某些数据中捕获数字的正则表达式
【发布时间】:2018-07-27 00:30:06
【问题描述】:

我有一些这样的日志

[2/16/18 3:07:24:515 GMT] 0000026b LoggerScripta I   ******Print all instances******10075
[2/16/18 3:07:24:516 GMT] 0000026b LoggerScripta I   ******Print all instances******10078
[2/16/18 3:07:24:516 GMT] 0000026b LoggerScripta I   ******Print all instances******10080

大约 300 行..但我只需要每行中的那些数字 (10075),其余的应该删除。是否有任何正则表达式可以帮助轻松获得这些数字,

我正在使用记事本++

任何帮助都会非常有用,因为它将拯救我们的一天

【问题讨论】:

  • 试试这个/\d+$/g
  • 它没有用。我应该用空白替换上面的模式吗?
  • 这些日志如何在 javascript 中表示。字符串数组或单个字符串
  • @PunithJain 每行只有一个字符串
  • 你的字符串不是如题所示吗?如果是多行使用/\d+$/gm

标签: javascript regex notepad++ regedit


【解决方案1】:

我将继续假设这些行中的每一行都是一个字符串,每个字符串都是数组中的一个元素。如果这个假设成立,那么这里是代码。否则,请更新该数据在 JavaScript 中的存储方式,我将重写我的答案:

// If your logs are an array of strings...
var logs = [
  '[2/16/18 3:07:24:515 GMT] 0000026b LoggerScripta I ******Print all instances******10075',
  '[2/16/18 3:07:24:516 GMT] 0000026b LoggerScripta I ******Print all instances******10078',
  '[2/16/18 3:07:24:516 GMT] 0000026b LoggerScripta I ******Print all instances******10080'
];

var numbersFromArray = logs.map((val) => {
  return val.split('***')
    .reverse()[0];
});

console.log(numbersFromArray);

// If your logs are a single string...
var logs = '[2/16/18 3:07:24:515 GMT] 0000026b LoggerScripta I ******Print all instances******10075 [2/16/18 3:07:24:516 GMT] 0000026b LoggerScripta I ******Print all instances******10078 [2/16/18 3:07:24:516 GMT] 0000026b LoggerScripta I ******Print all instances******10080';

var numbersFromString = logs.split('[')
  .map((val) => {
    return val.split('***')
      .reverse()[0]
      .trim();
  })
  .filter((val) => val !== '');

console.log(numbersFromString)

【讨论】:

  • 我们怎样才能轻松地将整个东西变成字符串,我的意思是添加那些'',为所有
  • 如果您的日志文件是一个巨大的字符串,那么我也可以添加到我的代码中以显示该示例。
  • 不胜感激
  • @hammy => 如果您正在处理一个巨大的字符串,无论它是单行还是多行,我都添加了该功能。该函数不会关心它包含多少行。
【解决方案2】:

如果您使用的是记事本++,并且想要删除除换行符之前的最后一个数字以外的所有内容,则在启用正则表达式的情况下进行查找/替换就足够了

查找:(.*\*)(\d+(\r\n)?)

替换(正则表达式):\2

它的作用:

第一个捕获组查找以星号结尾的任何内容(贪婪)。

第二个捕获组查找一组数字加上换行符(如果存在)(可能不是最后一个日志语句)。

替换将只为您留下每行的第二个捕获组。

【讨论】:

    【解决方案3】:

    使用记事本++:

    • Ctrl+H
    • 查找内容:^.+?(\d+)$
    • 替换为:$1
    • 检查环绕
    • 检查正则表达式
    • 请勿查看. matches newline
    • 全部替换

    说明:

    ^       : beginning of line
    .+?     : 1 or more any character but newline, not greedy
    (       : start group 1
      \d+   : 1 or more digits
    )       : end group
    $       : end of line
    

    替换:

    $1      : content of group 1
    

    给定示例的结果:

    10075
    10078
    10080
    

    【讨论】:

      猜你喜欢
      • 2011-11-21
      • 1970-01-01
      • 2023-02-18
      • 2020-06-22
      • 2011-03-31
      相关资源
      最近更新 更多