3

正規表現を使用した経験はほとんどなく、正規表現を使用して、方位として表される角度値を解析する必要があります。例:

"N45°20'15.3"E"

これは、北東象限にある 45 度、20 分、15.3 秒を表します。

制限事項は次のとおりです。

  • 最初の文字は「N」または「S」にすることができます
  • 最後の文字は「E」または「W」
  • 0 <= 度 <= 59
  • 0 <= 分 <= 59
  • 0 <= 秒 < 60、省略可。

できれば Python またはその他の言語。

ありがとう

4

2 に答える 2

8

次の正規表現を試してください。

^([NS])([0-5]?\d)°([0-5]?\d)'(?:([0-5]?\d)(?:\.\d)?")?([EW])$

…</p>

  • ^([NS])Nまたは   で始まるS
  • ([0-5]?\d)°09( ) の間の 1 桁\d、または最初の 1 桁が0and 5( [0-5]) と 2 番目の0and9の間、つまり0との間の 2 桁   のいずれかで、その後に度数が続きます59°
  • ([0-5]?\d)'   その後に分の値 (ここでも と の間0)59'
  • (?:([0-5]?\d)(?:\.\d)?")?"オプションで秒の値と記号   が続き、 との間の秒の値059オプションの追加の小数点、および
  • ([EW])$Eまたは   で終わりますW

10 未満の値の前に 0 を付けたくない場合は、 を に変更[0-5][1-5]ます。

于 2009-05-31T20:41:01.550 に答える
4

使用できるパターン:

pat = r"^([NS])(\d+)°(\d+)'([\d.]*)\"?([EW])$"

それを使用する 1 つの方法:

import re
r = re.compile(pat)
m = r.match(thestring)
if m is None:
  print "%r does not match!" % thestring
else:
  print "%r matches: %s" % (thestring, m.groups())

お気づきのように、一致すると、括弧で囲まれた各「グループ」m.groups()の一致のさまざまな部分が得られます-NまたはSの文字、次に度を表す1つ以上の数字など。ここでは「解析」を意味します。thestringpat

于 2009-05-31T20:36:55.240 に答える