2011-05-26 209 views
2

如何通过将字符串传递给您要查找的子字符串文本来获取字符串的子字符串。你也可以将正则表达式和普通文本结合起来而不会引起任何问题通过搜索字符串获取子字符串文本来获取字符串的子字符串?

+0

可以使用。载,但我真的不知道你问 – soandos 2011-05-26 02:09:15

+0

你能给怎样的例子这应该工作?我只是不确定你想要做什么。 – 2011-05-26 02:11:23

+0

你可以在你的问题的第二部分给出更多的解释吗? – 2011-05-26 02:39:03

回答

0

既然你已经知道子字符串了,我假设你正在检查字符串是否包含子字符串;你可以做

bool hasSubstring = str.Contains(subStr); 
+0

不,我已经知道如何检查它,我只是不确定如何获得它的位置 – Chris 2011-05-26 21:02:35

+0

'str.IndexOf(subStr)'会给你第一次出现的位置。还有一个'LastIndexOf()' – 2011-05-26 23:15:14

4

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

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

UPDATE:

基于您对URL匹配的注释,你可以做

查找字符串的位置
bool subStringExists = yourStringVariable.Contains("yourSubString"); 
bool subStringExists = yourStringVariable.IndexOf("yourSubString") >= 0; 

例子:检查子的存在

例子这一切都与一个正则表达式。使用正则表达式,可以使表达式的某些部分是文字,而其他部分是可变的。在你试图做你有这样的事情对你的正则表达式是什么情况:

// 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

+0

好吧,谢谢第二个是我的问题。你也可以使用正则文本和正则表达式的混合体,而不会导致任何问题? – Chris 2011-05-26 11:08:57

+0

我还不清楚你的意思。你能举一个你想要做什么的例子吗? – 2011-05-26 12:53:43

+0

好吧我在做的是解析一个网页,试图找到页面上的任何地方是否列出了某个网址。网址总是有不同的结尾,但总是以不同的数字结束。由于我不知道这些数字,所以我想知道是否可以用正则表达式(正则表达式)替换我不确定的数字,并保持已知url的其余部分相同。 – Chris 2011-05-26 21:04:34