-5

我想要一个正则表达式来匹配 .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”。

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

4

6 回答 6

1

不是 RegEx,但如果您已经在使用 C#,那么您可以将 ExtensionMethod 添加到 String 来为您执行此操作。

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");
于 2013-09-25T07:21:52.387 回答
0
string text = "asdf";

(?<=asdf)\w+$

这将匹配“asdf”之后的单词直到行尾。您可能需要根据需要更改行尾。

于 2013-09-23T13:32:28.740 回答
0
.{4}asdf

将匹配 asdf 和前面的四个字符。它不会匹配作为单词前 3 个字符的一部分出现的 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

基于子字符串的解决方案比基于正则表达式的解决方案更快。

于 2013-09-23T13:44:33.710 回答
0

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

字符串 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”。

于 2013-09-25T06:44:00.853 回答
0

你的问题不是很清楚,但也许你需要像下面这样的东西。

string text = "abcdefghijklmn";

string myString = (text.Length > 3)? text.Substring(text.Length - 4, 4): text;
于 2013-09-23T13:27:55.073 回答
0

你可能想要String.StartsWith()

if(myString.StartsWith("ABCD"))
    return "Found!";
于 2013-09-23T13:29:30.307 回答