将 po box javascript 正则表达式转换为 c# 正则表达式

Posted

技术标签:

【中文标题】将 po box javascript 正则表达式转换为 c# 正则表达式【英文标题】:Convert po box javascript regex to c# regex 【发布时间】:2016-09-13 20:05:56 【问题描述】:

我在堆栈溢出文章中看到了以下 javascript 正则表达式,我想将其转换为 C#:

var poBox = /^ *((#\d+)|((box|bin)[-. \/\\]?\d+)|(.*p[ \.]? ?(o|0)[-. \/\\]? *-?((box|bin)|b|(#|num)?\d+))|(p(ost)? *(o(ff(ice)?)?)? *((box|bin)|b)? *\d+)|(p *-?\/?(o)? *-?box)|post office box|((box|bin)|b) *(number|num|#)? *\d+|(num|number|#) *\d+)/i;

我尝试在开头和结尾删除 / 我认为它用于表示字符串文字,我还在末尾删除 /i 这似乎是为了不区分大小写,但我似乎仍然缺少其他转换在这里。

原始堆栈溢出文章在这里: PO Box Regular Expression Validation

谁能告诉我这里还缺少什么?对正则表达式不太熟悉,我在这里有点挣扎。

编辑:

这是修改后的c#代码,上面有注释:

public const string PoBoxRegex = @"^ *((#\d+)|((box|bin)[-. \/\\]?\d+)|(.*p[ \.]? ?(o|0)[-. \/\\]? *-?((box|bin)|b|(#|num)?\d+))|(p(ost)? *(o(ff(ice)?)?)? *((box|bin)|b)? *\d+)|(p *-?\/?(o)? *-?box)|post office box|((box|bin)|b) *(number|num|#)? *\d+|(num|number|#) *\d+)";

public static bool IsPoBox(string addressToCheck)

    if (string.IsNullOrWhiteSpace(addressToCheck))
    
        return false;
    

    if (Regex.IsMatch(addressToCheck, PoBoxRegex, RegexOptions.IgnoreCase))
    
        return true;
    

    return false;

【问题讨论】:

如果您展示了到目前为止的 c# 以及您得到的语法错误是什么,将会有所帮助。 如果您删除了/i,您是否至少在使用RegexOptions.IgnoreCase?您还应该使用逐字字符串文字 - @"pattern",并将 \/ 替换为 / 该模式应该在 C# 中运行良好。如果你写得对。 @Wobbles,老实说,c# 是如此简单,我认为没有必要或必要发布此内容。反正我已经发过了。这不是语法错误。事实上,正则表达式无法识别它在原始堆栈溢出帖子中所说的输入 是的,但是我们需要检查语法、拼写错误以及任何其他可能导致表达式在 c# 中失败的事情。您也没有指出实际问题是什么,它是否抛出异常,是否找不到匹配项?如果后者可以按照MCVE 的建议提供一个示例字符串来测试它 【参考方案1】:

由于有/i 修饰符,您需要使用RegexOptions.IgnoreCase。所有\/ 都应写为/,因为正斜杠不是特殊的正则表达式字符,也不是正则表达式分隔符(这些在C# 正则表达式中不存在)。将 JS 正则表达式文字转换为 C# 模式时,您还需要使用逐字字符串文字(即@"pattern")形式。

所以,使用

string PoBoxRegex = @"(?i)^ *((#\d+)|((box|bin)[-. /\\]?\d+)|(.*p[ .]? ?(o|0)[-. /\\]? *-?((box|bin)|b|(#|num)?\d+))|(p(ost)? *(o(ff(ice)?)?)? *((box|bin)|b)? *\d+)|(p *-?/?(o)? *-?box)|post office box|((box|bin)|b) *(number|num|#)? *\d+|(num|number|#) *\d+)";

(?i) 是一个内联不区分大小写的标志。

【讨论】:

以上是关于将 po box javascript 正则表达式转换为 c# 正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

1.3 正则表达式和python语言-1.3.8 创建字符集([ ])

根据相同字符的不同位置将正则表达式应用于熊猫列

正则表达式1

js基础——正则表达式

Swift 将 javascript 正则表达式转换为 ios 正则表达式

如何将 javascript 正则表达式转换为安全的 Java 正则表达式?