故如虹,知恩;故如月,知明
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
欢迎加群交流技术

c#正则表达式操作字符串,常用匹配,正则表达式替换字符串。js正则表达式提取字符串

8646人阅读 2019/5/13 17:58 总访问:3837401 评论:0 收藏:0 手机
分类: .NET


先来个.*?的解释吧

.   :  单个任意字符

*  :  重复多次、贪婪匹配。注意*在正则中不是任意字符,而是一个限定限定出现的次数

?  :  出现1次或者0次、非贪婪匹配

 

匹配只能输入英文数字下划线,并且不能数字开头

代码如下:

if (Regex.IsMatch(username, @"^[a-zA-Z_][A-Za-z0-9_]*$"))
{
    return Json("设置合法");
}
else
{
    return Json("设置不合法");
}

提取一个字符串的中文


string content = "SS上海xx北京";
List<string> chs = new List<string>();
Regex reg = new Regex("[\u4e00-\u9fa5]+");
foreach (Match v in reg.Matches(content))
    chs.Add(v.Value);

效果如下:


正则表达式拆分字符串


string content = "SS上海xx上海";
string[] sArray = Regex.Split(content, "上海", RegexOptions.IgnoreCase);

这个很简单,效果如下:

他可以根据一个字符串去拆分,后面的参数是忽略大小写



例子2:根据一个标签拆分字符串

拆分"aa<em>哈哈</em>bb<em>嘻嘻</em>cc"成 aa,bb,cc

  string[] str = Regex.Split(title, @"<em>.*?</em>");

拆分成aa,<em>哈哈</em>,bb,<em>嘻嘻</em,cc

  string[] str2 = Regex.Split(title,"(<em>.*?</em>)");

效果如下:

    

    其实很简单就是正则里边加一个()括起来就能取到它本身了


例子3:根据中文拆分字符串

string str = "aa哈哈哈哈bb嘻嘻嘻嘻ccc";
string[] str2 = Regex.Split(str, "([\u4e00-\u9fa5]+)");

效果如下:

 


正则表达式替换字符串


把重庆替换成<font>重庆</font>

string content = "SS重庆xx";
content = Regex.Replace(content, "重庆", "<font>重庆</font>", RegexOptions.IgnoreCase);




统一把- **xxx**替换成### xxx
代码如下:

Regex reg = new Regex(@"- \*\*(.*?)\*\*", RegexOptions.IgnoreCase);
MatchCollection matchs = reg.Matches(tempContent);
foreach (Match match in matchs)
{
    if (match.Success)
    {
        if (match.Groups.Count > 1) 
        {
            string beforeValue = match.Groups[0].Value;
            string value = match.Groups[1].Value;
            tempContent = tempContent.Replace(beforeValue, "### " + value);
            //tempContent = Regex.Replace(tempContent, beforeValue, "### " + value, RegexOptions.IgnoreCase);
            //tempContent = Regex.Replace(tempContent, @"- \*\*"+ value + @"\*\*", "### "+ value, RegexOptions.IgnoreCase);
        }
    }
}


把 from [XX] as [y] 替换为 from [XX] as [y]  WITH (NOLOCK)。也就是需要在后面加上WITH (NOLOCK) 其中[XX]与[y]可以是任意英文与数字与下划线的组合名称
代码如下

string input = "SELECT * from [tableName] as [alias]";
string pattern = @"from\s+\[[a-zA-Z0-9_]+\]\s+as\s+\[[a-zA-Z0-9]+\]";
string replacement = "$& WITH (NOLOCK)";
string output = Regex.Replace(input, pattern, replacement);

其中,input 是需要替换的字符串;pattern 是匹配模式,使用了正则表达式来匹配符合要求的子字符串;replacement 是替换模板,使用 $& 表示将匹配到的子字符串保留,并加上 WITH (NOLOCK);最后调用 Regex.Replace() 方法完成替换操作,将结果保存在 output 变量中。



刚刚的问题除了支持把 from [XX] as [y] 替换为 from [XX] as [y]  WITH (NOLOCK)还能支持把JOIN [XX] as [y] 替换为 from [XX] as [y]  WITH (NOLOCK)
以下是可以同时匹配 "from [XX] as [y]" 和 "JOIN [XX] as [y]" 并替换为 "from [XX] as [y] WITH (NOLOCK)" 的 C# 正则表达式代码:

string input = "SELECT * FROM [table1] JOIN [table2] AS [t2] WHERE [t2].[column1] > 10";
string pattern = @"(?:FROM|JOIN)\s+\[[a-zA-Z0-9_]+\]\s+AS\s+\[[a-zA-Z0-9]+\]";
string replacement = "$& WITH (NOLOCK)";
string output = Regex.Replace(input, pattern, replacement);

其中,(?:FROM|JOIN) 表示匹配 "FROM" 或 "JOIN",而 ?: 则表示不捕获该组,只用于分组,以便后面的 $& 可以正确地取到要替换的子字符串。其余部分与之前的正则表达式类似,使用了 \[[a-zA-Z0-9]+\] 来匹配方括号内的任意英文字母和数字的组合名称。


请注意,在实际应用中,这种替换方式可能会带来一些风险,因为使用 WITH (NOLOCK) 可能会造成数据不一致或其他问题。建议在使用时谨慎考虑并进行充分测试。



正则表达式匹配特殊字符


加一个转义就行了。比如要匹配- **xxxx**这种格式的内容

Regex.Replace(tempContent, @"- \*\*.*?\*\*", "### 哈哈哈", RegexOptions.IgnoreCase);

注意前面要加一个@


正则表达式提取字符串


例如有一个字符串:"使用ef实现多对多关系配置"

我想使用ef作为一个关键字进行提取,提取ef的左边,ef本身,ef的右边。


我们就可以写一个正则表达式来提取:    Regex reg = new Regex("^(.*)(ef)(.*)$", RegexOptions.IgnoreCase);

正则表达式中用()将要提取的内容括起来,然后就可以通过Match的Groups属性来得到所有的提取元素,注意Groups的序号是从1开始的,0有特殊含义

string content = "使用ef实现多对多关系配置";
string query = "EF";//正则表达式可以动态的来
List<string> search = new List<string>();
Regex reg = new Regex("^(.*)(" + query + ")(.*)$", RegexOptions.IgnoreCase);

Match match = reg.Match(content);
if (match.Success)
{
    for (int i = 1; i < match.Groups.Count; i++)
    {
        search.Add(match.Groups[i].Value);
    }
}

效果如下:



使用js编写一个正则表达式可以提取出来*.png的内容


问题描述:使用js编写一个正则表达式可以提取出来*.png的内容,*表示任意字符,比如给定一个字符串"iconfont iconrole rolemanger.png",希望能够得到rolemanger.png

示例代码:

const filename = "iconfont iconrole rolemanger.png";
const regex = /[\w-]+\.(png)/;
const result = regex.exec(filename);
if (result !== null) {
    console.log(result[0]); // 输出 rolemanger.png
}





正则表达式写起来很简单就是头冷








欢迎加群讨论技术,群:677373950(满了,可以加,但通过不了),2群:656732739

评价