[英]Get index of second non-alphanumeric
因此,我正在尝试清理一些文本块。 我认为regex
可能是一个不错的解决方案,而不是一堆if
语句。 但是a,我对正则表达式的表达不是很好。 所以我希望你们中的一些人愿意帮助我。
如果我有不同的文本,需要格式化
string one = "tbEmails";
string two = "dbo.tbEmails";
string three = "dbo.tbEmails,\n\t";
string four = "dbo.tbEmails.";
我正在寻找的结果是
one = "tbEmails";
two = "dbo.tbEmails";
three = "dbo.tbEmails";
four = "dbo.tbEmails";
我知道我可以通过使用获取第一个非字母数字值的索引
int index = new Regex("[^a-zA-Z ]").Match("dbo.tbEmails,\n\t").Index;
但是我怎么能忽略第一个呢.
在正则表达式中,获取第二个非字母数字值的索引。 另外,如果没有,有一种方法可以返回第一个非字母数字值.
在字符串中?
基本上,要获取第N个匹配索引,只需使用Regex.Matches
查找所有匹配项,然后检查是否可以访问具有必要索引的项目,如果是,请从Match对象获取所需的详细信息:
var index = -1;
var matches = Regex.Matches(str, @"[^a-zA-Z ]");
if (matches.Count > 1) // at least 2
{
index = matches[1].Index;
}
顺便说一句,非字母数字模式是[\\W_]
,而字母数字模式是[^\\W_]
[\\w-[_]]
(或[\\w-[_]]
)。
似乎您也可以使用正则表达式替换操作来获取所需的结果
Regex.Replace(str, @"(?s)^([^\W_]+(?:[\W_][^\W_]+)?).*", "$1");
或更简单的匹配正则表达式:
var match = Regex.Match(str, @"^[^\W_]+(?:[\W_][^\W_]+)?");
if (match.Success)
{
Console.Write(match.Value);
}
详细资料 :
^
-字符串开头 [^\\W_]+
-1个或更多字母数字字符 (?:[\\W_][^\\W_]+)?
-1次或0次出现:
[\\W_]
-1个字符(字母数字字符除外) [^\\W_]+
-1个或更多字母数字字符 看来您以一种更为复杂的方式向自己陈述了该问题,或者您举了一个比您要尝试的例子简单得多的示例。
如果尝试从字符串的开头和结尾删除不需要的字符,则可以执行myString.Trim('\\ n','。')。 如果您不知道要删除的具体字符集,则可以执行以下操作:
Regex.Replace(str, "[^\\\\w]*$","");
您可以使用此RegEx直接获取匹配项:
string value = new Regex("[A-Za-z ]+(?:[^A-Za-z ][A-Za-z ]+)?").Match("dbo.tbEmails,\n\t").Value;
术语[A-Za-z ]+
与所有[A-Za-z]字符匹配,直到第一个非[A-Za-z]字符为止。 (?:[^A-Za-z ][A-Za-z ]+)
与第一个其他字符和所有[A-Za-z]字符匹配,直到第二个其他字符。 ?
使第二部分成为条件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.