【问题标题】:Need dotnet regex to replace an underscore (_) with 0%需要 dotnet 正则表达式将下划线 (_) 替换为 0%
【发布时间】:2016-09-22 14:16:17
【问题描述】:

我们正在扫描一张卡片,卡片上印有ZZZZ_ss16,扫描为ZZZZ0%ss16。由于打印错误,用户最初注册的卡号错误。卡片重印会很棒,但不是一个选择。

我有一个 javascript 正则表达式应该可以完成这项工作,但在将其翻译为与 dotnet 一起使用时遇到了问题。

s/^(\w{4}).(\w{4})/\10%\1/

我们只需要前 4 个字符,将 _ 替换为 0%,然后是最后 4 个字符。

希望有人可以提供帮助。

【问题讨论】:

  • 试过 ^(\w{4})_(\w{4})$ 和 $10%$2 和 ^([A-Za-z0-9_]{4})_([A -Za-z0-9_]{4})$ 在regexstorm.net/tester 上使用 ${1}0%$2,但它们不起作用。有什么想法吗??
  • 这几乎是正确的,但仍然无法捕获前 4 个字符
  • 这几乎是正确的,但仍然无法捕获前 4 个字符 regexstorm.net/… 这显示为 0%ss16 而不是预期的 ZZZZ0%ss16
  • 看起来 ^(\w{4})_(\w{4})$ 和 ${1}0%$2 有效。稍后测试。感谢您的所有帮助:)

标签: javascript .net regex


【解决方案1】:

在这种情况下你可以使用

^(\w{4})_(\w{4})$

并替换为$10%$2

Regex Demo

.net 使用这个

var pattern = "^([A-Za-z0-9_]{4})_([A-Za-z0-9_]{4})$";
var template = "ZZZZ_ss16";
var replaceWith = "${1}0%$2";

Ideone Demo

【讨论】:

  • Keith Hall 已经提供了correct answer
  • 如果你需要在JS和.NET中用\w匹配相同的文本,只需使用new Regex(@"^(\w{4})_(\w{4})$", RegexOptions.ECMAScript);。见ECMAScript Matching Behavior
  • 我认为一般规则是“如果它最适合你就接受,如果它对你有帮助就点赞”。
【解决方案2】:

您可以创建一个正则表达式,将前四个字符捕获到捕获组 1,后四个字符捕获到捕获组 2,然后对输出组 1 执行替换,然后是 0%,然后是组 2。

var pattern = new Regex(@"^(\w{4})_(\w{4})$");
var input = "ZZZZ_ss16";
var output = pattern.Replace(input, "${1}0%$2");
// RESULT: ZZZZ0%ss16

Demo

$后面的数字必须转义,否则会被解释为第10个捕获组。推荐阅读:https://msdn.microsoft.com/en-us/library/ewy2t5e0%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-08-15
  • 2015-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-27
  • 1970-01-01
  • 2012-09-29
相关资源
最近更新 更多