編集: 1 つの文字列が欠落していました(
... 8( 時間を無駄にして申し訳ありません。
次の形式の文字列のリストがあります。
"Some Text (1234-567890)"
これを の周りで使用string.Split
またはRegex.Split
分割して(
から、最初の要素から前のテキストを引き出し、2 番目の要素から数字のテキストを引き出しようとしています。
元:
string myText = "Some Text (1234-567890)";
string[] myValues = myText.Split('(');
string first = myValues[0]; // should hold "Some Text "
string second = myValues[1]; // should hold "1234-567890)"
代わりに、string.Split
またはを使用するかどうかに関係なく、これを取得します。Regex.Split
(
元:
string myText = "Some Text (1234-567890)";
string[] myValues = myText.Split('(');
string first = myValues[0]; // has "Some Text 1234-567890)"
string second = myValues[1]; // exception; there is no second value
これは、 を使用した場合にも発生しますRegex.Split
。元:
string[] myValues = Regex.Split(myText, "\\(");
これを新しいプロジェクトに入れてみると、期待どおりに機能します。2 つの唯一の違いは、List<string>
Excel 相互運用機能を使用してデータを入力していることです。なぜそれが違いを生むのかわかりません。
私の実際のコードは次のようになります。
const int LOCATION_START = 2;
const int LOCATION_END = 39;
List<string> locationStrings = new List<string>();
for (int row = LOCATION_START + 1; row <= LOCATION_END; row++)
locationStrings.Add(pExcel.ActiveSheet.ReadValue<string>(row));
List<Tuple<string, string>> locations = new List<Tuple<string, string>>();
foreach (string locationString in locationStrings)
{
string[] values = Regex.Split(locationString, "\\(");
locations.Add(Tuple.Create(values[0].Trim(), values[1].Substring(0, 11)));
// ^ this line throws an exception, because there is only one value, not two
}
Excel.ActiveSheet.ReadValue
は、相互運用の Range 関数を使用して Excel シートから値を読み取り、それを にキャストしstring
ます。