RegEx 用于捕获字符串中的数字

Posted

技术标签:

【中文标题】RegEx 用于捕获字符串中的数字【英文标题】:RegEx for capturing digits in a string 【发布时间】:2019-10-10 03:50:28 【问题描述】:

我希望仅提取此“=»”之后的数字,但我也不断有一些其他文本:

正则表达式代码:

[^»]*[\d1,]$

输入

> login as: LOGIN SERVER@00.00.00.000's password: Last login: Thu May 23
> 15:51:49 2019 from 00.00.00.000 CREER AUTANT DE REPERTOIRES SOUS
> /NAME/NAME/NAME QU'IL Y A DE COMMERCANTS GERES. LE NOM DOIT ETRE LE NO
> DE COMMERCANT. CREER ENSUITE SOUS CHACUN D'EUX UN REPERTOIRE NAME/
> <SERVER>ps -fu NAME | grep exe | echo «resultat=»`wc -l` «resultat=»14
> <SERVER>

我该如何解决这个问题?

【问题讨论】:

请直接在您的问题中发布您的代码,而不是链接。链接变得陈旧,因此问题对于将来遇到问题的人来说毫无用处。 我现在贴在这里,我之前用过一个链接... [^»]*([\d1,]) 为您的帖子返回 14... @Michael 不,它不会,它也会返回其他信息...... 【参考方案1】:

你的表情很接近。我们可能只想将 作为左边界,然后用([0-9]+) 收集我们的数字,这可能会奏效:

=»([0-9]+)

正则表达式

如果不需要此表达式,可以在 regex101.com 中修改或更改它。

正则表达式电路

jex.im 可视化正则表达式:

测试

using System;
using System.Text.RegularExpressions;

public class Example

    public static void Main()
    
        string pattern = @"=»([0-9]+)";
        string input = @"> login as: LOGIN SERVER@00.00.00.000's password: Last login: Thu May 23
> 15:51:49 2019 from 00.00.00.000 CREER AUTANT DE REPERTOIRES SOUS
> /NAME/NAME/NAME QU'IL Y A DE COMMERCANTS GERES. LE NOM DOIT ETRE LE NO
> DE COMMERCANT. CREER ENSUITE SOUS CHACUN D'EUX UN REPERTOIRE NAME/
> <SERVER>ps -fu NAME | grep exe | echo «resultat=»`wc -l` «resultat=»14
> <SERVER>";
        RegexOptions options = RegexOptions.Multiline;

        foreach (Match m in Regex.Matches(input, pattern, options))
        
            Console.WriteLine("'0' found at index 1.", m.Value, m.Index);
        
    

演示

const regex = /=»([0-9]+)/gm;
const str = `> login as: LOGIN SERVER@00.00.00.000's password: Last login: Thu May 23
> 15:51:49 2019 from 00.00.00.000 CREER AUTANT DE REPERTOIRES SOUS
> /NAME/NAME/NAME QU'IL Y A DE COMMERCANTS GERES. LE NOM DOIT ETRE LE NO
> DE COMMERCANT. CREER ENSUITE SOUS CHACUN D'EUX UN REPERTOIRE NAME/
> <SERVER>ps -fu NAME | grep exe | echo «resultat=»\`wc -l\` «resultat=»14
> <SERVER>`;
let m;

while ((m = regex.exec(str)) !== null) 
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) 
        regex.lastIndex++;
    
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => 
        console.log(`Found match, group $groupIndex: $match`);
    );

【讨论】:

这返回两个值,我只需要 14 Full match=»14 Group 1. 14 @mz3bel 你可以用c#从=»14中提取14【参考方案2】:

方括号中的字符表示“其中一个字符”,所以它是 ?或 » 后跟一个数字或 、 1 、 或 。

正向后视在这里是最有用的(匹配 X 之后的内容。)

(?

所以:

(?

一个或多个数字前面有一个 » ,但不要捕获 »

【讨论】:

以上是关于RegEx 用于捕获字符串中的数字的主要内容,如果未能解决你的问题,请参考以下文章

Groovy:RegEx用于匹配字母数字和下划线和短划线

Javascript RegEx 匹配没有前后连字符的单词

如何使用 Regex.Replace 从字符串中删除数字?

正则表达式捕获引号内和带/不带空格的数字

VSCode 中的正则表达式:捕获每个字符/字母 - 不仅仅是 ASCII

使用Spark SQL中的regex函数从字符串中提取特定数字