C# String.Split和Regex.Split不工作?
编辑:单个字符串缺少其C# String.Split和Regex.Split不工作?,c#,excel-interop,C#,Excel Interop,编辑:单个字符串缺少其(…8)(很抱歉浪费您的时间 我有以下格式的字符串列表: "Some Text (1234-567890)" 我正在尝试使用string.Split或Regex.Split将其围绕()进行拆分,然后从第一个元素中提取前面的文本,从第二个元素中提取数字文本 例: 相反,无论我使用string.Split还是Regex.Split,我得到的都是一个数组,其中包含一个值,没有() 例: 如果使用Regex.Split.Ex: string[] myValues = Regex.
(
…8)(很抱歉浪费您的时间
我有以下格式的字符串列表:
"Some Text (1234-567890)"
我正在尝试使用string.Split
或Regex.Split
将其围绕(
)进行拆分,然后从第一个元素中提取前面的文本,从第二个元素中提取数字文本
例:
相反,无论我使用string.Split
还是Regex.Split
,我得到的都是一个数组,其中包含一个值,没有(
)
例:
如果使用Regex.Split
.Ex:
string[] myValues = Regex.Split(myText, "\\(");
如果我尝试将其放入一个新的项目中,它会像我预期的那样工作。两者之间的唯一区别是我使用Excel interop填充列表
。我不明白为什么这会有什么不同
我的实际代码如下所示:
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
}
const int LOCATION\u START=2;
const int LOCATION_END=39;
List locationStrings=新列表();
对于(int row=位置\u开始+1;行
你需要避开开头的括号。它对正则表达式引擎有特殊的意义
您需要跳出左括号。它对正则表达式引擎有特殊意义。此代码应适用于:
string[] myValues = myText.Split(new string[] { "(" }, StringSplitOptions.None);
此代码应适用于:
string[] myValues = myText.Split(new string[] { "(" }, StringSplitOptions.None);
数据格式不正确。一行的格式如下:
"Some Text 1234-567890)"
因此Split方法只返回该字符串。数据格式不正确。一行的格式如下:
"Some Text 1234-567890)"
因此Split方法只返回该字符串。显示的代码按预期工作。获得该结果的唯一方法是该字符串不包含任何起始括号,例如包含“Some Text 1234-567890”
而不是“Some Text(1234-567890)”
也有可能是某些不常用的字符在一个环境中看起来像起始括号,但在另一个环境中却是不可打印的字符
从Exfel工作表中获取字符串时,应检查字符串实际包含的内容。显示的代码按预期工作。获得该结果的唯一方法是字符串不包含任何起始括号,例如包含“Some Text 1234-567890”
而不是“Some Text(1234-567890)”
也有可能是某些不常用的字符在一个环境中看起来像起始括号,但在另一个环境中却是不可打印的字符
从Exfel工作表中获取字符串时,您应该检查字符串实际包含的内容。如果您想这样做,这里有一个使用代码的解决方案,我刚刚添加了一行新行
myValues[1]=myValues[1]。替换(“)”,“”);
这将删除您看到的恼人的“)”字符
您的原始代码可以删除“(”但“(”和“)”之间有区别。
下面是一个传递参数的更好示例,参数之间用“”分隔,“
如果你想这样做,这里有一个解决方案,使用你的代码,我只是添加了一个新行
myValues[1]=myValues[1]。替换(“)”,“”);
这将删除您看到的恼人的“)”字符
您的原始代码可以删除“(”但“(”和“)”之间有区别。
下面是一个传递参数的更好示例,参数之间用“”分隔,“
你能从Excel interop发布更多关于此列表的详细信息吗?你能从Excel interop发布更多关于此列表的详细信息吗?我会检查代码,如果你运行该代码,它在myValues[1]@DJ KRAZE中仍然保留“)”,很抱歉响应太晚,但是,在那段时间里我没有笔记本电脑。。。要将“)”也从文本中排除,代码应该如下所示:string[]myValues=myText.Split(新字符串[]{”(“,”)},StringSplitOptions.None);我会检查代码,如果你运行了代码,它仍然会在myValues[1]@DJ KRAZE中保留一个“)”,很抱歉反应太晚了,但是,在那段时间里我没有笔记本电脑。。。要将“)”也从文本中排除,代码应该如下所示:string[]myValues=myText.Split(新字符串[]{”(“,”)},StringSplitOptions.None);你的答案是做某事的一个非常长的方法检查我的示例运行并测试你和我的,我发布的内容更有效。你的答案是做某事的一个非常长的方法检查我的示例运行并测试你和我的,我发布的内容更有效。是的,你是正确的。我错误地认为这两个元素以某种方式融合为一个元素。起初,我以为是LINQ出于某种奇怪的原因将可枚举项展平了。但是没有,您是正确的,列表中的一个值丢失了它的(
完全正确。是的,你是对的。我错误地认为这两个元素以某种方式融合成了一个元素。起初我以为是LINQ出于某种奇怪的原因使枚举变平了。但是不,你是对的,列表中的一个值丢失了它的(
)。
"Some Text 1234-567890)"
string myText = "Some Text (1234-567890)";
string[] myValues = myText.Split('(',')');
string first = myValues[0]; // should hold "Some Text "
string second = myValues[1];