-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
.{4}asdf

asdf とその前の 4 文字に一致します。単語の最初の 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

String.StartsWith()が必要な場合があります

if(myString.StartsWith("ABCD"))
    return "Found!";
于 2013-09-23T13:29:30.307 に答える
0
string text = "asdf";

(?<=asdf)\w+$

これは、「asdf」から行末までの単語に一致します。必要に応じて、行末を変更する必要がある場合があります。

于 2013-09-23T13:32:28.740 に答える
0

私も機能する解決策を見つけ、それをフォーラムの他のメンバーと共有することにしました。助けてくれてありがとう。これは私がしたことです:

文字列 s = "adgstuoppdnmudio hjdk.ABCD kglog doplsjood";

文字列 x = s.Substring(0,s.IndexOf("ABCD"));

//これにより、x = "adgstuoppdnmudio hjdk." が得られます。次に、以下を実行して最後の5文字を​​取得します

string lastChars = x.Substring(x.Length-Math.Min(5,x.Length));

// これにより、lastChars = "hjdk." が得られます。

于 2013-09-25T06:44:00.853 に答える