通过在字符串中搜索子字符串文本来获取字符串的子字符串?

时间:2011-05-26 02:07:09

标签: c# string

如何通过将字符串传递给您要查找的子字符串文本来获取字符串的子字符串。您还可以将正则表达式与常规文本结合使用而不会导致任何问题

2 个答案:

答案 0 :(得分:4)

如果您想知道字符串中是否存在子字符串,可以使用Contains。如果您想知道字符串中子字符串的位置,可以使用IndexOf(也可以用来查看它是否存在...请参阅下面的示例)。

检查子串存在的示例:

bool subStringExists = yourStringVariable.Contains("yourSubString");
bool subStringExists = yourStringVariable.IndexOf("yourSubString") >= 0;

查找子串位置的示例:

int subStringPosition = yourStringVariable.IndexOf("yourSubString");

更新:

根据您对网址匹配的评论,您可以使用正则表达式完成所有操作。使用正则表达式,您可以使表达式的某些部分为文字,而其他部分是可变的。如果您正在尝试做什么,那么您的正则表达式会有这样的东西:

// Will match on http://www.mywebsite.com/abc#.aspx, where # is 1 or more digits
const string regExCommand = "(http://www.mywebsite.com/abc\\d+\\.aspx)";

这是一个完整的工作示例,您可以将其复制到控制台项目中并随意查找您需要的内容:

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

namespace RegExExample
{
    public class Program
    {
        static void Main()
        {
            var urls = new List<Url>
            {
                new Url
                {
                    Name = "Match 1",
                    Address = "http://www.mywebsite.com/abc123.aspx"
                },
                new Url
                {
                    Name = "Match 2",
                    Address = "http://www.mywebsite.com/abc45.aspx"
                },
                new Url
                {
                    Name = "Match 3",
                    Address = "http://www.mywebsite.com/abc5678.aspx"
                },
                new Url
                {
                    Name = "No Match 1",
                    Address = "http://www.otherwebsite.com/abc123.aspx"
                    // No match because otherwebsite.com
                },
                new Url
                {
                    Name = "No Match 2",
                    Address = "http://www.mywebsite.com/def123.aspx"
                    // No match because def
                }
            };

            // Will match on http://www.mywebsite.com/abc#.aspx, where # is 1 or more digits
            const string regExCommand = "(http://www.mywebsite.com/abc\\d+\\.aspx)";

            var r = new Regex(regExCommand, RegexOptions.IgnoreCase | RegexOptions.Singleline);

            urls.ForEach(u =>
            {
                var m = r.Match(u.Address);
                if (m.Success)
                {
                    Console.WriteLine(String.Format("Name: {0}{1}Address: {2}{1}",
                                                    u.Name,
                                                    Environment.NewLine,
                                                    u.Address));
                }
            });

            Console.ReadLine();
        }
    }

    internal class Url
    {
        public string Name { get; set; }
        public string Address { get; set; }
    }
}

输出如下:

姓名:比赛1 地址:http://www.mywebsite.com/abc123.aspx

姓名:第2场比赛 地址:http://www.mywebsite.com/abc45.aspx

姓名:第3场比赛 地址:http://www.mywebsite.com/abc.5678.aspx

答案 1 :(得分:0)

由于您已经知道子字符串,我假设您正在检查字符串是否包含子字符串;你可以做到

bool hasSubstring = str.Contains(subStr);