【问题标题】:Regex works differently on different computer正则表达式在不同计算机上的工作方式不同
【发布时间】:2010-07-16 15:45:39
【问题描述】:

我正在编写一个使用正则表达式匹配传入数据的程序。正则表达式适用于我正在编码的计算机,但它不适用于我正在测试的客户端计算机。它可以在我的计算机上以调试模式、发布模式运行,并且可以直接从 bin 运行。什么可能使正则表达式的工作方式有所不同?

正则表达式:

const string _pattern
    = @"^(?:\x02)?([A-Z])(ST)([WS])([1-9])([ AM])([ NSEWIO])([- ]\d{6})([ M])([1CPN])(\w)?(?:\x0D)?$";
static readonly Regex _regex
    = new Regex(_pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);

字符串:

@"ASTS2MI-000020 C0"

【问题讨论】:

  • 两台机器上的可执行文件是否具有完全相同的版本?
  • 是的,可执行文件可以。但这让我开始思考……我意识到正则表达式在一个 library 中,这不一样。我把它们关掉了,它工作得很好。 D'oh

标签: c# .net regex windows-xp


【解决方案1】:

可能你需要 CultureInvariant:

static readonly Regex _regex
    = new Regex(_pattern, RegexOptions.CultureInvariant | RegexOptions.IgnoreCase | RegexOptions.Compiled);

Performing Culture-Insensitive Operations in the RegularExpressions Namespace 所述,默认情况下不区分大小写的匹配会考虑Thread.CurrentCulture

【讨论】:

  • 从技术上讲,这不是 我的 问题,但它很好地回答了我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-30
  • 2017-01-14
  • 1970-01-01
  • 1970-01-01
  • 2018-12-10
  • 2018-12-29
  • 2020-09-13
相关资源
最近更新 更多