【问题标题】:Matching two single quotes or double quote匹配两个单引号或双引号
【发布时间】:2013-05-20 16:53:30
【问题描述】:

我有以下字符串。它是度、分和秒格式的 LatLongs, 并可按如下方式输入:

Option1: 25º 23" 40.6' or
Option2: 25º 23'' 40.6' or
Option3: 25 23 40.6

使用一个正则表达式我想匹配两个字符串,对我来说问题是匹配“(双引号)和''(两个单引号)。
到目前为止,我有以下内容。

^[+|-]?[0-9]{1,2}[\º| ][ ]?[0-9]{1,2}[\"|'{2}| ] 

我正在 lunix (Ubuntu) 上的终端中构建和测试 regx。
从我在终端中得到的输出中,它匹配 "(双引号) 但只有一个 ' '(两个单引号) .
如何更改正则表达式以匹配一个表达式中的“(双引号)和''(两个单引号)?

提前致谢。

【问题讨论】:

  • 度数可以到>99,为什么要限制在两位数?

标签: regex


【解决方案1】:

看看这个模式:

([+-]?\d{1,2}(?:\.\d{1,2})?.)\s*(\d{1,2}(?:\.\d{1,2})?[\S]*)\s*(\d{1,2}(?:\.\d{1,2})?'?)

它独立于任何特殊字符,包括最多支持 2 位数字,以及您的问题的解决方案。

【讨论】:

    【解决方案2】:

    您的正则表达式有问题。例如,[\"|'{2}| ] 匹配单个 "|'{2}。请尝试以下操作:

    ^([+-]?\d+)º? ?\b(\d+)\b(?:''|\")? ?([\d.]+)'?$
    

    说明:

    ^               # Start of string
    ([+-]?\d+)      # Match an integer
    º?[ ]?          # Match a degree and/or a space (both optional)
    \b(\d+)\b       # Match a positive integer (entire number)
    (?:''|\")?[ ]?  # Match quotes and/or space (all optional)
    ([\d.]+)        # Match a floating point number
    '?              # Match an optional single quote
    $               # End of string
    

    【讨论】:

    • 这个正则表达式允许 12.12.12.12....12。秒。将最终术语更改为 \\d\\d?(\\.\\d+)? - 十进制的标准正则表达式
    • @Bohemian:是的,这个正则表达式并不是为了验证输入。如果是,它也必须检查有效的度/分/秒范围。这似乎不是 OP 的意图,这也是为什么它不是我的。
    • 很公平,但你可以加倍努力,让它更紧;离验证更近了一步,它很可能迟早会结束。 恭喜 100K!
    【解决方案3】:

    我认为您真正希望上面的正则表达式是

    ^[+|-]?[0-9]{1,2}º? ?[0-9]{1,2}(\"|'{2})? ?[0-9]{1,2}\.[0-9]'?
    

    虽然这也匹配一些奇怪的东西,比如

    25 23'' 40.6
    

    您的正则表达式使用自定义字符类([] 中的部分)只能匹配一个字符。您可以通过() 将多个字符组合在一起,并使用? 使这些组成为可选。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多