regex - 使用 IndexOf 和 Substring 在 IndexOf 之后捕获字符串
问题描述
我刚刚遇到了一些问题,我会要求您提供其他可能的解决方案。我有一个字符串:
string text = "This is a very serious sample text, not a joke!"
现在我想找到“严重”这个词的位置,并在“严重”之后得到字符串的其余部分。
我解决这个问题的一种方法是:
$text="This is a very serious sample text, not a joke!"
$start=($text).IndexOf("serious")
(($text).Substring($start+"serious".Length)).TrimStart()
我确信也有一个正则表达式解决方案,但我想知道是否可以使用 IndexOf() 然后使用 Substring 在“严重”之后获取字符串的其余部分。
我也在这里查看了这篇文章:烦人的字符串子字符串和 IndexOf但要么它不是我正在寻找的解决方案/问题,要么我不明白......
提前感谢您的帮助,阿迪斯
解决方案
由于 SubString 的其中一个重载仅采用起始 index,因此首先找到哪里serious
(注意尾随空格),然后从该点选择子字符串加上搜索内容的长度。
通过将搜索词放入变量中,可以将其长度作为属性访问。更改搜索词也很容易,因为它只需要更新变量值而不是搜索和替换字符串值。
像这样,
$searchTerm = "serious "
$start = $text.IndexOf($searchTerm)
$text.Substring($start + $searchTerm.length)
sample text, not a joke!
至于一个简单的正则表达式,使用-replace
和模式^.*serious
。这将匹配字符串的开头,然后匹配后面的^
任何内容。用空字符串替换它会删除匹配的字符串开头。像这样,.*
seroius
"This is a very serious sample text, not a joke!" -replace '^.*serious ', ''
sample text, not a joke!
在某些情况下,扩展方法可能是直接的解决方案。这些允许向现有的 .Net 类添加新方法。通常的解决方案是继承,但由于字符串是密封的,所以这是不允许的。所以,扩展方法是要走的路。一种情况可能是创建一种方法,例如,IndexEndOf
该方法将返回搜索词结束的位置。
添加 .Net 代码(在本例中为 C#)非常简单。示例代码改编自另一个答案。该IndexEndOf
方法执行算术并返回模式结束处的索引。像这样,
$code=@'
public class ExtendedString {
public string s_ {get; set;}
public ExtendedString(string theString){
s_ = theString;
}
public int IndexEndOf(string pattern)
{
return s_.IndexOf(pattern) + pattern.Length;
}
public static implicit operator ExtendedString(string value){
return new ExtendedString(value);
}
}
'@
add-type -TypeDefinition $code
$text = "This is a very serious sample text, not a joke!"
$searchTerm = "serious "
$text.Substring(([ExtendedString]$text).IndexEndOf($searchTerm))
sample text, not a joke!
推荐阅读
- powershell - 无法识别术语“Get-MailboxFolderStatistics”
- r - R - 如何使所有数据点在地图中可见
- latex - 乳胶奇怪的脚注编号
- python - Keras 预测和 Sagemaker 预测不同
- r - 如何在R中以“yyyy-mm-dd”的形式获取当前一周的星期五作为日期
- angularjs - 如何在 ui.router 上为 Angular 1 激活其他方式?
- react-native - 将背景图像添加到反应导航抽屉
- c - 编写ac函数,检查一个int数组是否只包含1和2
- javascript - Netlify 向 HTTP 发出 HTTPS 请求
- flutter - '未来的实例
'