Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Regex,它对某些类型更为重要_C#_Regex - Fatal编程技术网

C# Regex,它对某些类型更为重要

C# Regex,它对某些类型更为重要,c#,regex,C#,Regex,我正在尝试匹配城市、州、邮编,但它们都是可选的。 规则是,如果我找到5个数字,它就是一个拉链。如果我找到两个字母,那就是状态。 剩下的就是城市 分隔符可以是空格、逗号,也可以是难看的句点 我想到了这个: ^(?<CITY>[A-Z ]*)[ ,]+(?<STATE>[A-Z]{2})?\.?([ ,]+(?<ZIP>[0-9]{5}))?$ 但它没有强调邮政和州规则。所以我错过了几个场景。最后4个不起作用 我如何执行这个规则?一些原子弹?有人展望未来吗?我刚

我正在尝试匹配城市、州、邮编,但它们都是可选的。 规则是,如果我找到5个数字,它就是一个拉链。如果我找到两个字母,那就是状态。 剩下的就是城市

分隔符可以是空格、逗号,也可以是难看的句点

我想到了这个:

^(?<CITY>[A-Z ]*)[ ,]+(?<STATE>[A-Z]{2})?\.?([ ,]+(?<ZIP>[0-9]{5}))?$
但它没有强调邮政和州规则。所以我错过了几个场景。最后4个不起作用


我如何执行这个规则?一些原子弹?有人展望未来吗?

我刚把它们做成了可选的分离器

^(?<CITY>[A-Z ]*)?([ ,]+)?(?<STATE>[A-Z]{2})?\.?(([ ,]+)?(?<ZIP>[0-9]{5}))?$
^(?[A-Z]*)([,]+)([A-Z]{2})吗?([,]+)([0-9]{5})吗$

请看

我刚把它们做成了可选的分离器

^(?<CITY>[A-Z ]*)?([ ,]+)?(?<STATE>[A-Z]{2})?\.?(([ ,]+)?(?<ZIP>[0-9]{5}))?$
^(?[A-Z]*)([,]+)([A-Z]{2})吗?([,]+)([0-9]{5})吗$
请参见您可以使用的

^(?<CITY>[A-Z ]*?)(?:[ ,]*\b(?<STATE>[A-Z]{2})\.?)?(?:[ ,]*\b(?<ZIP>[0-9]{5}))?$
^(?[A-Z]*?)(?:[,]*\b(?[A-Z]{2})\.?)(?:[,]*\b(?[0-9]{5}))$
或者,如果城市部分可能包含任何字符,则将
[A-Z]*?
替换为
*?
。将文本空间替换为
\s
,以匹配任何空白字符

详细信息

  • ^
    -字符串的开头
  • (?[A-Z]*?)
    -城市组:任何0+大写ASCII字母或空格,尽可能少
  • (?:[,]*\b(?[A-Z]{2})\?)?
    -可选模式匹配
    • [,]*
      -零个或多个空格或逗号
    • \b
      -单词边界
    • (?[A-Z]{2})
      -状态组:两个大写ASCII字母
    • \?
      -可选点
  • (?:[,]*\b(?[0-9]{5}))?
    -可选模式匹配:
    • [,]*
      -零个或多个空格或逗号
    • \b
      -单词边界
    • (?[0-9]{5})
      -邮政编码组:五位数字
  • $
    -字符串结束
看。输出:

您可以使用

^(?<CITY>[A-Z ]*?)(?:[ ,]*\b(?<STATE>[A-Z]{2})\.?)?(?:[ ,]*\b(?<ZIP>[0-9]{5}))?$
^(?[A-Z]*?)(?:[,]*\b(?[A-Z]{2})\.?)(?:[,]*\b(?[0-9]{5}))$
或者,如果城市部分可能包含任何字符,则将
[A-Z]*?
替换为
*?
。将文本空间替换为
\s
,以匹配任何空白字符

详细信息

  • ^
    -字符串的开头
  • (?[A-Z]*?)
    -城市组:任何0+大写ASCII字母或空格,尽可能少
  • (?:[,]*\b(?[A-Z]{2})\?)?
    -可选模式匹配
    • [,]*
      -零个或多个空格或逗号
    • \b
      -单词边界
    • (?[A-Z]{2})
      -状态组:两个大写ASCII字母
    • \?
      -可选点
  • (?:[,]*\b(?[0-9]{5}))?
    -可选模式匹配:
    • [,]*
      -零个或多个空格或逗号
    • \b
      -单词边界
    • (?[0-9]{5})
      -邮政编码组:五位数字
  • $
    -字符串结束
看。输出:


请不要像这样链接到外部网站。请在问题中填写完整答案-显示输入、输出、代码和解释-然后链接到外部网站,为您的内容提供支持。我已填写完整答案(正则表达式)我已经链接到regex站点,该站点显示了regex应用于OP共享的示例,以举例说明regex如何应用于其数据的每一行。有什么问题吗?请解释正则表达式,并说明如何在您的答案中应用正则表达式。你应该有一个完整的答案,然后再链接到任何地方。外部链接可能会断开,因此强烈建议不要使用。该正则表达式不起作用。你可以看到,作为一个城市,你几乎匹配所有东西。请不要像这样链接到外部网站。请在问题中填写完整答案-显示输入、输出、代码和解释-然后链接到外部网站,为您的内容提供支持。我已填写完整答案(正则表达式)我已经链接到regex站点,该站点显示了regex应用于OP共享的示例,以举例说明regex如何应用于其数据的每一行。有什么问题吗?请解释正则表达式,并说明如何在您的答案中应用正则表达式。你应该有一个完整的答案,然后再链接到任何地方。外部链接可能会断开,因此强烈建议不要使用。该正则表达式不起作用。你可以看到,你几乎把所有的东西都当作一个城市来匹配。重点是将惰性匹配与第一组+可选的非捕获组结合起来,并在+边界内使用强制性模式(第二组和第三组命名),以确保第二组和第三组作为一个整体出现时匹配。原子组在这里会阻止回溯,它们在这里没有帮助。重点是将惰性匹配与第一组+可选的非捕获组结合起来,并在+边界内使用强制性模式(第二组和第三组命名),以确保第二组和第三组作为整个单词出现时匹配。原子组在这里会阻止回溯,他们在这里不会有帮助。