【问题标题】:Change regex pattern to match string one character at a time更改正则表达式模式以一次匹配字符串一个字符
【发布时间】:2015-04-16 22:03:30
【问题描述】:

我正在制作一个匹配特定区域的十进制纬度和经度的正则表达式模式。它应该匹配从 40 到 46 或 115 到 125,然后是小数,然后最多 10 位。它这样做。问题是它被用于 ASYNC 验证,因此每个单独的数字/字符都需要匹配。这是模式:

@"^((4[0-6])|(11[5-9]|12[0-5]))(\.|°)?([0-9]{1,10})°?$"; 

所以它应该匹配 4、43、43.、43.123 等。它匹配一个完整的模式,但不匹配个人。我一直在研究非捕获组,但它似乎不适合这里,我的测试也没有结果。我是不是走错了路?

【问题讨论】:

  • 为什么要匹配4?如果字符串是唯一的 4 那么你会得到一个错误的匹配?
  • 是的。也许我需要在 switch 语句中使用几个模式,所以字符串可能会失败,直到它匹配某些东西或失败。
  • Regex 似乎不适合这种特殊情况。您可以使用大量嵌套的、可选的、非捕获组来实现它,但最终会得到一个完全混乱的表达式。
  • ^(?!.*°°.*$)(?:((4[0-6])|(11[5-9]|12[0-5]))(\.|°)?([0-9]{1,10})?°?|4|1[12]?)$ 这样的东西怎么样?演示:regex101.com/r/fL4aU3/1。请注意,您不能将其用于最终验证。
  • 正则表达式只匹配一个完整的模式。您可以使用状态机在处理过程中跟踪状态,但正则表达式不会帮助您,除非您将每个异步可能性作为单独的正则表达式(或“|” - 或 - 它们),这会导致许多部分/表达式。

标签: c# regex


【解决方案1】:
(((4[0-6])|(11[5-9]|12[0-5]))(\.|°)?([0-9]{1,10})°?(, )?)+

这种表达方式是否符合您的需求?

【讨论】:

    【解决方案2】:

    我现在确信正则表达式不是这里的方法。如果有人想就此提出答案,我会关闭这件事,我们可以继续我们的日子。谢谢你。 – BattlFrog

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多