使用正则表达式匹配子字符串
本文关键字:字符串 正则表达式 | 更新日期: 2023-09-27 18:32:21
我希望正则表达式匹配 .NET 中字符串的前 4 个字符。
更具体地说,我使用 substring
方法来搜索一段字符串的第一次出现及其前面的 4 个字符。
假设我有一个这样的字符串:
..在我的代码中,这就是我所做的
string s = "adgstuoppdnmudio hjdk.ABCD kglog doplsjood"
string x = s.Substring(s.IndexOf("ABCD"))
。这就是我得到的,x = "adgstuoppdnmudio hjdk.ABCD"
我正在寻找的是如何获取上述字符串 (hjdk.) 中 ABCD 之前的 5 个字符,以便我的最后一个字符串是"hjdk.ABCD"。
我可能会使用char Array
然后使用它附带的反向函数,以便我可以向后读取我的字符串,但我相信正则表达式会更快地工作,因此在我的问题标题中我强调了"使用正则表达式"。
不是正则表达式,但如果您已经在使用 C#,那么您可以将 ExtensionMethod 添加到字符串中为您执行此操作。
public static class StringExtensions
{
public static string Preceeds(this string s, string word)
{
string response = s;
int pos2 = s.IndexOf(word);
int pos1 = s.Substring(0, pos2).LastIndexOf(" ");
if (pos1 != -1 && pos2 != -1 && (pos2 >= pos1))
{
response = s.Substring(pos1, pos2 - pos1 + word.Length);
}
return response;
}
}
然后你可以这样做。
x = s.Preceeds("ABCD");
您的问题不是很清楚,但是您可能需要如下所示的内容。
string text = "abcdefghijklmn";
string myString = (text.Length > 3)? text.Substring(text.Length - 4, 4): text;
你可能想要 String.StartsWith()
if(myString.StartsWith("ABCD"))
return "Found!";
string text = "asdf";
(?<=asdf)'w+$
这将匹配"asdf"后面的单词,直到行尾。您可能需要根据需要更改行尾。
.{4}asdf
将匹配 asdf 和前面的四个字符。 它不会匹配作为单词前 3 个字符的一部分出现的 asdf。
使用可能更好
.{0,4}asdf
但这取决于您希望边缘情况的行为方式。
String |First match of .{4}asdf |First match of .{0,4}asdf
123asdf | *No match* | 123asdf
12345asdf | 2345asdf | 2345asdf
asdfasdf | asdfasdf | asdfasdf
123asdfasdf | asdfasdf | 123asdf
基于子字符串的解决方案比基于正则表达式的解决方案更快。
我找到了一个也有效的解决方案,并决定与论坛的其他成员分享。感谢您的协助。这是我所做的:
字符串 s = "adgstuoppdnmudio hjdk.ABCD kglog doplsjood";
字符串 x = s.Substring(0,s.IndexOf("ABCD"));
这给了我 x = "adgstuoppdnmudio hjdk."然后我做下面的事情来获取最后 5 个字符
字符串 lastChars = x.Substring(x.Length-Math.Min(5,x.Length));
这给了我 lastChars = "hjdk"。