1

こんにちは、変数の一部のみを一致させて保存したいと思います。たとえば、要素b12asc34sx110の場合、 b12asc34sと一致させて変数に格納し、x110も別の変数に格納します。要素の値は、b12hdh56sx120 または b12hdgwa78x20 のように変化し続けます。私が試しているコードは

set element b12asc34sx110
regexp [\(.*)\ {[^x(0-9]}] $element matched1 
regexp [x(0-9)] $element matched2
puts $matched1
puts $matched2

要素の値はユーザーから取得されるため、毎回変更される可能性があります。私は正規表現が初めてなので、難しいと思います。私はそれの出力を得ていません。これで私を助けてください。

4

4 に答える 4

1

2番目の部分に「x」が発生しないと仮定します。

set element "b12asc34sx110"
if {[set i [string last "x" $element]] >= 0} {
  set head [string range $element 0 $i-1]
  set tail [string range $element $i end]
}

「x」が 2 番目の部分で発生する可能性があるが、最初の部分では発生しない場合は、に変更string laststring firstます。

于 2013-07-23T00:46:44.077 に答える
1

あなたはこれを行うことができます:

#!/usr/bin/tclsh

set element "b12asc34sx110"
set pattern "(.*)(x.*$)"

if {[regexp $pattern $element whmatch sub1 sub2]} {
    puts $sub1 
    puts $sub2
}

注意:
文字列に複数の x がある場合、2 番目のキャプチャ グループは最後の x から始まります。これは、最初の量指定子が最初に評価され、貪欲 (デフォルトの動作) であるためです。したがって、最初のキャプチャ グループには可能な最大の部分文字列が含まれます。
最小の最初の部分文字列を探している場合は、代わりに次のパターンを使用します (遅延量指定子を使用):

set pattern "(.*?)(x.*$)"
于 2013-07-22T23:21:40.817 に答える
0

「x」が定数の場合、x で分割し、最初の値を 1 つに、2 番目の値を別の値に配置するだけです。定数であり、常に表示されます。アルファと数値を取得するには、右側が常に数値であるかどうかを知るのに十分なデータがないため(*)x(*)、x の左側のすべて (これが常に存在すると仮定) と右側のすべてを取得する必要があります。

于 2013-07-22T23:07:00.087 に答える
0

のような正規表現を使用しregexp {([^x]*)x([0-9]*)} "b12asc23sx110" matched1 sub1 sub2ます。

于 2013-07-22T22:54:10.033 に答える