Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用正则表达式进行子字符串匹配_C#_Regex - Fatal编程技术网

C# 使用正则表达式进行子字符串匹配

C# 使用正则表达式进行子字符串匹配,c#,regex,C#,Regex,我想要一个正则表达式来匹配.NET中字符串的前导4个字符 更具体地说,我使用substring方法来搜索一段字符串的第一次出现及其前面的4个字符 假设我有这样一个字符串: …在我的代码中,这就是我所做的 string s = "adgstuoppdnmudio hjdk.ABCD kglog doplsjood" string x = s.Substring(s.IndexOf("ABCD")) …这就是我得到的,x=“adgstuoppdnmudio hjdk.ABCD”我要寻找的是如何获得

我想要一个正则表达式来匹配.NET中字符串的前导4个字符

更具体地说,我使用
substring
方法来搜索一段字符串的第一次出现及其前面的4个字符

假设我有这样一个字符串:

…在我的代码中,这就是我所做的

string s = "adgstuoppdnmudio hjdk.ABCD kglog doplsjood"
string x = s.Substring(s.IndexOf("ABCD"))
…这就是我得到的,
x=“adgstuoppdnmudio hjdk.ABCD”
我要寻找的是如何获得上述字符串(hjdk.)中ABCD之前的5个字符,以便我的最后一个字符串是“hjdk.ABCD”


我可能会使用
字符数组
,然后使用它附带的反向函数,这样我就可以反向读取字符串,但我相信正则表达式会工作得更快,因此在我的问题标题中,我强调了“使用正则表达式”。

您的问题不是很清楚,但是您可能需要下面这样的内容

string text = "abcdefghijklmn";

string myString = (text.Length > 3)? text.Substring(text.Length - 4, 4): text;
你可能想要

string text=“asdf”;
(?
将匹配asdf和前面的四个字符。它将不匹配作为单词前三个字符的一部分出现的asdf

你最好用它

.{0,4}asdf
但这取决于您希望边缘案例的行为

String      |First match of .{4}asdf |First match of .{0,4}asdf
123asdf     | *No match*             | 123asdf
12345asdf   | 2345asdf               | 2345asdf
asdfasdf    | asdfasdf               | asdfasdf
123asdfasdf | asdfasdf               | 123asdf

基于子字符串的解决方案比基于regexp的解决方案更快。

我找到了一个同样有效的解决方案,并决定与论坛的其他成员分享。感谢您的帮助。我就是这么做的:

字符串s=“adgstuoppdnmudio hjdk.ABCD kglog doplsjood”

字符串x=s.Substring(0,s.IndexOf(“ABCD”)

//这给了我x=“adgstuoppdnmudio hjdk。”然后我执行以下操作以获得最后5个字符

字符串lastChars=x.Substring(x.Length-Math.Min(5,x.Length))


//这给了我lastChars=“hjdk。”

不是正则表达式,但是如果您已经在使用C#,那么您可以向String添加一个ExtensionMethod来为您执行此操作

public static class StringExtensions
{
    public static string Preceeds(this string s, string word)
    {
        string response = s;

        int pos2 = s.IndexOf(word);
        int pos1 = s.Substring(0, pos2).LastIndexOf(" ");

        if (pos1 != -1 && pos2 != -1 && (pos2 >= pos1))
        {
            response = s.Substring(pos1, pos2 - pos1 + word.Length);
        }

        return response;
    }
}
那你就可以这么做了

x = s.Preceeds("ABCD");

你的问题不清楚。你能重新措辞吗?在你的结果中发布一些你想要的代码。好的。假设我有一个字符串,像这样的字符串s=“adgstuoppdnmudio hjdk.kang kglog doplsjood”。在我的代码中,这是我做的字符串x=s.Substring(s.IndexOf(“ABCD”)…这就是我得到的,x=“adgstuoppdnmudio hjdk.kang”我想知道的是如何在上面的字符串(hjdk.)中获得ABCD之前的5个字符,这样我的最后一个字符串就是“hjdk.ABCD”。我希望现在更清楚。谢谢。看到这里这样的帖子我有点累了。作者要求社区为他编写代码,而不表现出他自己的任何努力。当然,得到一个快速回复并有几行代码可以复制可能会很好,但实际上从中可以学到什么。我知道这已经说过很多次了,但新用户应该接受教育!@UNNELNGOUMANDJOKA您可能想在您的问题中添加这一点。诚然(与我的问题所建议的不同),此解决方案不使用正则表达式,但我还是决定发布它,以防有人像我一样在正则表达式方面遇到一些困难
String      |First match of .{4}asdf |First match of .{0,4}asdf
123asdf     | *No match*             | 123asdf
12345asdf   | 2345asdf               | 2345asdf
asdfasdf    | asdfasdf               | asdfasdf
123asdfasdf | asdfasdf               | 123asdf
public static class StringExtensions
{
    public static string Preceeds(this string s, string word)
    {
        string response = s;

        int pos2 = s.IndexOf(word);
        int pos1 = s.Substring(0, pos2).LastIndexOf(" ");

        if (pos1 != -1 && pos2 != -1 && (pos2 >= pos1))
        {
            response = s.Substring(pos1, pos2 - pos1 + word.Length);
        }

        return response;
    }
}
x = s.Preceeds("ABCD");