繁体   English   中英

C#正则表达式模式位置和最后3个字符

[英]c# regex pattern position and last 3 chars

我试图基于文件名创建一个新的字符串。 名称的一部分包含不相关的信息,例如当前年份。 例如D2015987.txt 对我而言,正则表达式的重要部分是从文件名部分中提取D987

我首先使用Regex.Match(@"D\\d{4}|\\d{3}\\b+") ,当我得到值时,这似乎剪掉了最后一位数字。 实际上,我正在尝试根据此值创建一个新字符串,因此我也可以使用string newStr = Regex.Replace(pattern).value ...

我还需要帮助来创建一个新的值,该值将匹配类似于此D11Q1987.txt ...的模式D11Q1987.txt ...从这个我也需要DQ987部件。

在此先感谢您的帮助。

试试这个:模式是^(\\w)\\d+(\\d{3})\\.txt$替换为$1$2

现在,您根据(C#)语法在您的代码中使用此代码。 我希望这项工作。 C#代码

using System.IO;
using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
    // This is the input string we are replacing parts from.
    string input = "D2015987.txt";

    // Use Regex.Replace to replace the pattern in the input.
    string output = Regex.Replace(input, @"^(\w)\d+(\d{3})\.txt$", "$1$2");

    // Write the output.
    Console.WriteLine(input);
    Console.WriteLine(output);
    }
}

输出C#

D2015987.txt
D987

另一个PHP解决方案

$str = "D2015987.txt";

preg_match($re, $str, $matches);
$r=$matches[1].$matches[2];
var_dump($r );

PHP的输出

string 'D987' (length=4)
  1. (.)抢到第一个,捕获组1
  2. \\d+匹配任意数量的数字(但至少一个数字)
  3. ([A-Za-z])匹配单个字符,并将其捕获为组1。
  4. \\d匹配一个数字。
  5. (\\d{3})匹配三个数字。
  6. \\. 逃脱时期。
  7. txt完成查找文字txt的操作

正则表达式:

    (.)\d+([A-Za-z])\d(\d{3})\.txt

现在,如果最后一位数字是可变长度的,但始终以数字开头,我们只需将{3}更改为+

    (.)\d+([A-Za-z])\d(\d+)\.txt

$1包含D(以您的示例为例),`$ 2'包含Q(以您的示例为例),$ 3包含987,但这两个示例都取决于前面是否有一个我们可以用作标记但可以扔掉的数字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM