2011-05-26 179 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