正则表达式拆分字符串

时间:2016-05-04 11:47:11

标签: c# regex

我不擅长正则表达式,我需要你的帮助。 我有这样的字符串:Re:_ = C8SOB_Poji = 9A = 9Dovna 我需要通过单个字母拆分成字符串[],但当出现“=”时,以下两个符号作为一个输入字段。

示例:string input = "Re:_=C8SOB_Poji=9A=9Dovna";

结果:string[] strs = {R,e,:,_,C8,S,O,B,_,P,o,j,i,9A,9D,o,v,n,a}

6 个答案:

答案 0 :(得分:1)

这是一个非正则表达式解决方案

private static IEnumerable<string> CustomSplit(string str)
{
    if (str == null)
    {
        yield break;
    }
    for (int i = 0; i < str.Length; i++)
    {
        if (str[i] == '=' && i < str.Length - 2 && str[i + 1] != '=' && str[i + 2] != '=')
        {
            yield return str.Substring(i + 1, 2);
            i += 2;
        }
        else
        {
            yield return str.Substring(i, 1);
        }
    }
} 

这将确保等号后面有两个非等号符号,或者只输出等号并继续下一个字符。如果IEnumerable<string>stringnull为空,则返回空string

答案 1 :(得分:1)

最简单的解决方案(?) - 循环并测试=

using System;


public class Program
{
    public static void Main()
    {
        string  str = "Re:_=C8SOB_Poji=9A=9Dovna";
        char    ch, q;

        for(int idx=0; idx<str.Length; idx++)
        {
            // Default - interpret as a single character
            q = ' ';
            ch = str[idx];

            if(str[idx]=='=' && idx+2<str.Length)
            {
                // Assume HEX, otherwise catch and use defaults
                try {
                    ch = (char)Convert.ToInt32(str.Substring(idx+1,2),16);
                    idx+=2;
                    q = '"'; // "Quote" converted character
                }
                catch {};
            }

            // Do something with result
            Console.WriteLine( "{0}{1}{2}", q, ch, q);
        }       
    }
}

将控制台输出更改为与字符无关的任何内容。

Check the .net fiddle

此致

修改:添加了十六进制代码到字符的转换;)

答案 2 :(得分:1)

这里采用RegEx方法

string input = "Re:_=C8SOB_Poji=9A=9Dovna";

string[] strs = Regex.Matches(input, "((?<=)[0-9A-F]{2}|.(?<!=))")
                     .Cast<Match>().Select(x => x.Value).ToArray();

我更新了您的要求的答案,=后面必须跟两个[0-9A-F]个字符

答案 3 :(得分:0)

我通过拆分来解决它

string s = @"Re:_=C8SOB_Poji=9A=9Dovna";
string[] sArr = s.Split('=');
List<string> temp = new List<string>();

bool bGetTwo = false;

if (s[0] == '=')
{
    bGetTwo = true;
}

foreach (var str in sArr)
{
    if (bGetTwo)
    {
        temp.Add(str.Substring(0, Math.Min(str.Length, 2)));
    }

    bGetTwo = true;

    if (str.Length > 2)
    {
        string subStr = str.Substring(2, str.Length-2);
        foreach (var c in subStr.ToCharArray())
        {
            temp.Add(c.ToString());
        }                    
    }                
}
sArr = temp.ToArray();

答案 4 :(得分:0)

我发现这样的正则表达式:

public class FacebookLoginActivity extends AppCompatActivity {
private CallbackManager callbackManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(this.getApplicationContext());
    callbackManager = CallbackManager.Factory.create();
    initCallback();

    Button button = (Button) findViewById(R.id.button);
    button.setOnClickListener(new OnClickLinew View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // add this on facebook sign in button click listener
            LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile","email"));
        }
    });
}

private void initCallback() {
    LoginManager.getInstance().registerCallback(callbackManager,
            new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                   AccessToken.setCurrentAccessToken(loginResult.getAccessToken());

                @Override
                public void onCancel() {

                }

                @Override
                public void onError(FacebookException exception) {

                }

            }
    );
}

@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);
}

我没有足够的声誉来添加评论

答案 5 :(得分:-1)

如果我的问题很好,你可以使用:

string[] stringarray= "Re:_=C8SOB_Poji=9A=9Dovna".ToCharArray().Select(c => c.ToString()).ToArray();