C#子字符串和索引查找

8

我有一个字符串,长这样 - "FirstName||Sam LastName||Jones Address||123 Main ST ..."(还有100多个不同的值)

我想从整个字符串中仅找到Sam和Jones。

所以字符串firstname = originalstring.substring ...等等。

有人知道我该怎么做吗?

补充说明 - 我觉得我忘了提到几件事情。

FirstName||Sam\r\n MiddleName||\r\n LastName||Jones\r\n ....

现在如果我只计算字符数是不够的,因为除了名字姓氏之外还可能需要更多的项目。


我不清楚原始字符串的格式。您的字符串似乎每行有一个数据项,这是正确的吗?每个字符串是否有多个人记录,还是每个字符串只有一个人记录? - Katie Kilian
当我查看您的编辑时,发现您有多行。但是StackOverflow应用于您的问题的格式(实际上是HTML应用于您的问题)将它们压缩成一行。因此我感到困惑。 - Katie Kilian
我希望我的解释已经解决了你的问题,Charlie。对于在场的每个人,非常感谢你们试图帮助我。 - refer
整个字符串中只有一个人,你需要名字和姓氏吗?还是字符串中有多个人,你需要找到多个姓和名字? - Katie Kilian
5个回答

8

使用正则表达式

string myString = "FirstName||Sam LastName||Jones Address||123 Main ST...";
string pattern = @"FirstName\|\|(\w+) LastName\|\|(\w+) ";
Match m = Regex.Match(myString, pattern);
string firstName = m.Groups[1].Value
string lastName = m.Groups[2].Value;

See its Demo here.


我喜欢没有其他人建议正则表达式的方式 :) 对此点赞。 - cwharris

5

我认为这种方法比使用.Split更好。如果在'Sam'和'LastName'之间有||,那么你肯定需要使用.Split。但现在这种情况下,这样做可能更好。

    string inStr = "FirstName||Sam LastName||Jones Address||123 Main ST ";
    int fStart = inStr.IndexOf("FirstName") + "FirstName".Length + "||".Length;
    int fEnd = inStr.IndexOf(" LastName");

    string FirstName = inStr.Substring(fStart, fEnd - fStart);

1
我会将字符串分两次,一次在空格上,另一次在 || 上,以获取名字和姓氏的值。
string [] ary = s.Split(" ");
string [] key;
string firstname;
string lastname;
foreach (string val in ary ) {
    key = val.Split("||");
    if ( key[0] == "FirstName") {
         firstname = key[1];
}
if ( key[0] == "LastName") {
   lastname = key[1];
}
}

只要名称中不包含空格,它就能正常工作。 - Zebi
在这个例子中,以空格分割是行不通的 - 请检查街道名称(如果需要的话)。 - BrokenGlass
当存在空格时,使用“splitting on ' '”会失败,例如,Address||123 Main ST。请注意,此处的“||”表示分隔符。 - Metro Smurf
如果您假设顺序保持不变且名称中没有空格,则应该没问题。 - Avitus

0
str = Str.Split("||")[1].split(" ")[0] //Sam
str = Str.Split("||")[2].split(" ")[0] // Jones

0

类似这样的代码:

string firstname = originalstring.Substring(indexof("FirstName") + 11, ((indexof("LastName) - indexof("FirstName") + 11 )

这样你就可以得到“||”后面的第一个字母,直到“lastname”前面的第一个字母。对于姓氏,你只需要将firstname替换为lastname,lastname替换为address即可。

编辑:我的错...不是substring.(indexOf...而是

originalString.Substring(origianlString.IndexOf("FirstName) + 11, (originalString.IndexOf("LastName") - originalString.IndexOf("FirstName") + 11)当查找姓氏时,不是+11,而是10,因为"LastName".Length + + "||".Length = 10


Rob P. 把它比我整洁了一些 :) - Ivan Crojach Karačić

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接