用C#查找string中的文本
如何在string中find给定的文本? 之后,我想创build一个新的string和其他东西之间。 例如…
如果string是:
This is an example string and my data is here
我想创build一个string与“我的”和“是”之间的任何我怎么能做到这一点? 对不起,这是非常伪,但希望它是有道理的。
使用此function。
public static string getBetween(string strSource, string strStart, string strEnd) { int Start, End; if (strSource.Contains(strStart) && strSource.Contains(strEnd)) { Start = strSource.IndexOf(strStart, 0) + strStart.Length; End = strSource.IndexOf(strEnd, Start); return strSource.Substring(Start, End - Start); } else { return ""; } }
如何使用它:
string text = "This is an example string and my data is here"; string data = getBetween(text, "my", "is");
这是最简单的方法:
if(str.Contains("hello"))
你可以使用正则expression式:
var regex = new Regex(".*my (.*) is.*"); if (regex.IsMatch("This is an example string and my data is here")) { var myCapturedText = regex.Match("This is an example string and my data is here").Groups[1].Value; Console.WriteLine("This is my captured text: {0}", myCapturedText); }
string string1 = "This is an example string and my data is here"; string toFind1 = "my"; string toFind2 = "is"; int start = string1.IndexOf(toFind1) + toFind1.Length; int end = string1.IndexOf(toFind2, start); //Start after the index of 'my' since 'is' appears twice string string2 = string1.Substring(start, end - start);
你可以像这样紧凑地做到这一点:
string abc = abc.Replace(abc.Substring(abc.IndexOf("me"), (abc.IndexOf("is", abc.IndexOf("me")) + 1) - abc.IndexOf("size")), string.Empty);
static void Main(string[] args) { int f = 0; Console.WriteLine("enter the string"); string s = Console.ReadLine(); Console.WriteLine("enter the word to be searched"); string a = Console.ReadLine(); int l = s.Length; int c = a.Length; for (int i = 0; i < l; i++) { if (s[i] == a[0]) { for (int K = i + 1, j = 1; j < c; j++, K++) { if (s[K] == a[j]) { f++; } } } } if (f == c - 1) { Console.WriteLine("matching"); } else { Console.WriteLine("not found"); } Console.ReadLine(); }
除了@ Prashant的回答,上面的答案已被错误地回答。 答案的“replace”function在哪里? OP问道:“之后,我想在这个和其他东西之间创build一个新的string”。
基于@奥斯卡的出色反应,我将其function扩展为一个"Search And Replace"
function于一身。
我认为@Prashant的答案应该是OP所接受的答案,因为它代替了。
无论如何,我已经调用了我的变体ReplaceBetween()
。
public static string ReplaceBetween(string strSource, string strStart, string strEnd, string strReplace) { int Start, End; if (strSource.Contains(strStart) && strSource.Contains(strEnd)) { Start = strSource.IndexOf(strStart, 0) + strStart.Length; End = strSource.IndexOf(strEnd, Start); string strToReplace = strSource.Substring(Start, End - Start); string newString = strSource.Concat(Start,strReplace,End - Start); return newString; } else { return string.Empty; } }
string WordInBetween(string sentence, string wordOne, string wordTwo) { int start = sentence.IndexOf(wordOne) + wordOne.Length + 1; int end = sentence.IndexOf(wordTwo) - start - 1; return sentence.Substring(start, end); }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Threading; using System.Diagnostics; namespace oops3 { public class Demo { static void Main(string[] args) { Console.WriteLine("Enter the string"); string x = Console.ReadLine(); Console.WriteLine("enter the string to be searched"); string SearchText = Console.ReadLine(); string[] myarr = new string[30]; myarr = x.Split(' '); int i = 0; foreach(string s in myarr) { i = i + 1; if (s==SearchText) { Console.WriteLine("The string found at position:" + i); } } Console.ReadLine(); } } }
这是我使用Oscar Jara的功能作为模型的function。
public static string getBetween(string strSource, string strStart, string strEnd) { const int kNotFound = -1; var startIdx = strSource.IndexOf(strStart); if (startIdx != kNotFound) { startIdx += strStart.Length; var endIdx = strSource.IndexOf(strEnd, startIdx); if (endIdx > startIdx) { return strSource.Substring(startIdx, endIdx - startIdx); } } return String.Empty; }
这个版本至多有两个文本search。 它避免了在search仅在开始string之前出现的结束string(即, getBetween(text, "my", "and");
。
用法是一样的:
string text = "This is an example string and my data is here"; string data = getBetween(text, "my", "is");
如果你知道你总是想要“我的”和“是”之间的string,那么你总是可以执行以下操作:
string message = "This is an example string and my data is here"; //Get the string position of the first word and add two (for it's length) int pos1 = message.IndexOf("my") + 2; //Get the string position of the next word, starting index being after the first position int pos2 = message.IndexOf("is", pos1); //use substring to obtain the information in between and store in a new string string data = message.Substring(pos1, pos2 - pos1).Trim();