形式 (データ型 - 文字列) は、{1}.{0}.{2}@xyz.com という形式です。また、[email protected] という同じ形式の文字列もあります。リスト、文字列配列、またはその他のデータ構造に指定された形式に文字列を分割するにはどうすればよいですか (形式で指定された数値は、対応する文字列が格納されるインデックスです)。区切り文字は、 、 、 /
などの任意の文字にすることができます。
例:-
1) Format - {0}.{1}@xyz.com
String - [email protected]
String array[]= { "name0", "name1"}
2) Format - {1}.{0}.{2}@xyz.com
String - [email protected]
String array[]= { "pos1", "pos0", "pos2"}
3) Format - {0}.{1}
String - name0.name1
String array[] = { "pos0", "pos1"}
何か試してみましたか?何かエラーに遭遇しましたか? .(ピリオド)が唯一の区切り文字として使用されているか、それが異なりますさまざまな入力について?
– プラサド・テルキカール
2020 年 9 月 3 日 16:36
何でも構いません
– アシシュ・アガルワル
2020 年 9 月 3 日 16:37
必要に応じて、{#} を (.*?) に置き換え、他の文字をエスケープすることで、形式を正規表現に変換できる場合があります。ただし、「{0}.{1}」の形式が正しくないという問題があります。何かに一致するでしょう「1.2.3」のようなNG 2 つの異なる方法で。
– ジュハール
2020 年 9 月 3 日 16:38
余談ですが、私は通常、このようなコードを見つけたときに、文字列補間を使用するように変換します。 $"{foo} バー {baz}"。
– エリック J.
2020 年 9 月 3 日 16:48
------------------------
using System;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace ConAppCore
{
class Program
{
static void Main(string[] args)
{
Test("{0}.{1}@xyz.com", "[email protected]");
Test("{1}.{0}.{2}@xyz.com", "[email protected]");
Test("{0}.{1}", "name0.name1");
}
static void Test(string format, string input)
{
string pattern = CreatePattern(format);
var match = Regex.Match(input, pattern);
var array = match.Groups
.OfType<Group>()
.Skip(1)
.OrderBy(g => g.Name, StringComparer.Ordinal)
.Select(g => g.Value)
.ToArray();
Console.WriteLine(string.Join(", ", array));
}
static string CreatePattern(string format)
{
var sb = new StringBuilder();
var match = Regex.Match(format, @"(.*?)\{(\d+)\}");
int index;
int length;
do
{
sb.Append(Regex.Escape(match.Groups[1].Value));
sb.Append("(?'group").Append(match.Groups[2].Value).Append(@"'\w+)");
index = match.Index;
length = match.Length;
match = match.NextMatch();
} while (match.Success);
sb.Append(Regex.Escape(format.Substring(index + length)));
return sb.ToString();
}
}
}
------------------------
次のことを試してください:
string[] inputs = { "[email protected]", "[email protected]", "name0.name1" };
string pattern = "(?'path'.*)@(?'site'.*)";
foreach(string input in inputs)
{
Match match = Regex.Match(input,pattern);
string[] paths = match.Groups["path"].Value.Split(new char[] {'.'}).ToArray();
string site = match.Groups["site"].Value;
Console.WriteLine("Path : '{0}', Site : '{1}'", string.Join("-", paths), site);
}
Console.ReadLine();