我不擅长正则表达式,我需要你的帮助。 我有这样的字符串: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}
答案 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>
为string
或null
为空,则返回空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);
}
}
}
将控制台输出更改为与字符无关的任何内容。
此致
修改:添加了十六进制代码到字符的转换;)
答案 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();