我正在尝试编写一个带有字符串形式的正则表达式:
<123>, ;<123>:::,<123>
其中123是某个数字,数字之间是一些标点符号。
我需要一个正则表达式,用“”替换数字字段之间的所有标点符号。
我试过了:
Regex.Replace(s, ">.*<", "");
但没有运气。什么正则表达式会实现这个目标?
编辑:我原来的正则表达式有点误导,对不起!正如评论者所说,我正在寻找&lt; 123&gt;&lt; 123&gt;&lt; 123&gt;
答案 0 :(得分:2)
您需要让.*
部分非贪婪,否则它会在您的字符串中的第一个>
和最后 <
之间拾取所有内容。尝试类似:
Regex.Replace(s, ">.*?<", "");
这也将删除>
和<
字符。如果你想保留那些:
Regex.Replace(s, ">.*?<", "><");
答案 1 :(得分:2)
也不确定C#的确切语法,但是如果你的字符串保证不在这些尖括号之外的数字,那么你应该能够逃脱这个:
Regex.Replace(s, "[^\d<>]*", "");
删除任何不是数字或“&lt;”的内容或“&gt;”。如果你还想删除尖括号,它甚至更简单:
Regex.Replace(s, "[^\d]*", "");
答案 2 :(得分:1)
这两项都应该有效:
Regex.Replace(s, @"(\>|^).*?($|\<(?=\d{3}\>))", "$1$2");
或
String.Concat(Regex.Matches(s, @"\<\d{3}\>")
.OfType<Match>().Select(a => a.Groups[0]));
答案 3 :(得分:0)
你应该按照建议使用括号。但我没有得到你想要替换的东西。
string s = "<123>, ;<123>:::,<123>";
s = (new Regex("[<>:, ;]")).Replace(s, "\"");
最终字符串将是;
“123” “” “” 123 “” “” “” 123"