正規表現を使用した経験はほとんどなく、正規表現を使用して、方位として表される角度値を解析する必要があります。例:
"N45°20'15.3"E"
これは、北東象限にある 45 度、20 分、15.3 秒を表します。
制限事項は次のとおりです。
- 最初の文字は「N」または「S」にすることができます
- 最後の文字は「E」または「W」
- 0 <= 度 <= 59
- 0 <= 分 <= 59
- 0 <= 秒 < 60、省略可。
できれば Python またはその他の言語。
ありがとう
次の正規表現を試してください。
^([NS])([0-5]?\d)°([0-5]?\d)'(?:([0-5]?\d)(?:\.\d)?")?([EW])$
…</p>
^([NS])
N
または で始まるS
([0-5]?\d)°
0
と9
( ) の間の 1 桁\d
、または最初の 1 桁が0
and 5
( [0-5]
) と 2 番目の0
and9
の間、つまり0
との間の 2 桁 のいずれかで、その後に度数が続きます59
。°
([0-5]?\d)'
その後に分の値 (ここでも と の間0
)59
と'
(?:([0-5]?\d)(?:\.\d)?")?
"
オプションで秒の値と記号 が続き、 との間の秒の値0
と59
オプションの追加の小数点、および([EW])$
E
または で終わりますW
。10 未満の値の前に 0 を付けたくない場合は、 を に変更[0-5]
し[1-5]
ます。
使用できるパターン:
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つ以上の数字など。ここでは「解析」を意味します。thestring
pat