求写一个正则表达式,超出了我的水平,偿试没有写成功

三碗猪脚 2019-05-22 01:30:23
正则表达式不过关,没有能写出来,求
字符串大致要求是这样
$aaa$bbbb$要的内容$汉字$\$转义也要\$$eeee$@……*$
提取相邻$$中间的字符串(任意字符,含\$转义),每个$符只能使用一次,如示红色的字部分是我想要的内容,
貌似有点小复杂,水平有限,没有写出来
...全文
245 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
三碗猪脚 2019-05-23
  • 打赏
  • 举报
回复
多谢楼台的几位兄台,12年的老司机,因为我是业余开发者,写代码不是我的正职,所以水平有限,而且对正则平时用的比较少,所以只会一些基础的,让大家见笑了
诺维斯基 2019-05-23
  • 打赏
  • 举报
回复
引用 12 楼 诺维斯基 的回复:
你这个建议,第一步先把\$替换成其他的,比如:\# 然后再用正则:\$[^\$]+?\$ 取出结果。 在线测试地址:http://www.regexp.cn/regex
然后再把\#替换回去。
诺维斯基 2019-05-23
  • 打赏
  • 举报
回复
你这个建议,第一步先把\$替换成其他的,比如:\# 然后再用正则:\$[^\$]+?\$ 取出结果。 在线测试地址:http://www.regexp.cn/regex
wid999 2019-05-22
  • 打赏
  • 举报
回复
找个变通的方法:

static void Main(string[] args)
{
const string sEscape = "#,.#";
string sample = @"$aaa$bbbb$要的内容$汉字$\$转义也要\$$eeee$@……*$";

string s = sample.Replace(@"\$", sEscape);
Console.WriteLine(s);
System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(
@"\$(?<a>[^\$]+?)\$",
System.Text.RegularExpressions.RegexOptions.Singleline);
System.Text.RegularExpressions.MatchCollection mc = reg.Matches(s);
foreach (System.Text.RegularExpressions.Match m in mc)
Console.WriteLine(m.Groups["a"].Value.Replace(sEscape, @"\$"));
Console.ReadKey();
}

  • 打赏
  • 举报
回复
(?<k1>[\\\$]++)([\s\S]*?)\k<k1>

这个正则只能在C++里起作用,C#会报错,C#貌似没禁止回溯

另外,这个正则和上面代码里的不是同一个正则
  • 打赏
  • 举报
回复
            var txt = @"$aaa$bbbb$要的内容$汉字$\$转义也要\$$eeee$@……*$";
            foreach (System.Text.RegularExpressions.Match match
                in System.Text.RegularExpressions.Regex.Matches(txt, @"(?<k1>[\\\$]+)([^\\\$]*)\k<k1>"))
            {
                Console.WriteLine(match.Groups[1].Value);
            }
秋的红果实 2019-05-22
  • 打赏
  • 举报
回复
@"(^|[^\\])\$(.+?[^\\])\$" Groups[2]就是你要的
业余草 2019-05-22
  • 打赏
  • 举报
回复
引用 楼主 三碗猪脚 的回复:
正则表达式不过关,没有能写出来,求 字符串大致要求是这样 $aaa$bbbb$要的内容$汉字$\$转义也要\$$eeee$@……*$ 提取相邻$$中间的字符串(任意字符,含\$转义),每个$符只能使用一次,如示红色的字部分是我想要的内容, 貌似有点小复杂,水平有限,没有写出来
看到12年的老司机了,吓的我不敢说话了!!
stherix 2019-05-22
  • 打赏
  • 举报
回复
(?<!\\)\$.*?(?<!\\)\$ 匹配会把前后的$也匹配进去,自行删除
天际的海浪 2019-05-22
  • 打赏
  • 举报
回复

var str = "$aaa$bbbb$要的内容$汉字$\\$转义也要\\$$eeee$@……*$";
var arr = [];
str.replace(/\$((\\\$|.)+?)\$/g,function(s,a){
	arr.push(a);
});
alert(arr);

adam_gin 2019-05-22
  • 打赏
  • 举报
回复
$([\s\S]*?)$
河南棒小伙 2019-05-22
  • 打赏
  • 举报
回复
语句:'$aaa$bbbb$要的内容$汉字$\$转义也要\$$eeee$@……*$'.match(/\$[^\$|\$]*\$/g), 匹配结果:["$aaa$", "$要的内容$", "$$", "$$", "$@……*$"], 字符串里的转义符,真的是没找到,字符串中$\$匹配出来的结果为什么是$$,好像字符串里也把它当转义符了,用正则表达式 语句:'$aaa$bbbb$要的内容$汉字$\$转义也要\$$eeee$@……*$'.match(/\$\$.*\$\$/g) 匹配结果:["$$转义也要$$"], 这尼玛好像字符串里$\$就等于$$似的,静等高手解答。

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧