2011-04-05 05:57:20 +0000 2011-04-05 05:57:20 +0000
45
45
Advertisement

正規表現で行内の最初の出現のみを一致させる

Advertisement

正規表現については全くの初心者なので、何かお役に立てることがあれば幸いです。私は次のように読み取るレコードを持つCSVファイルを持っています:

12345,67890,12345,67890
12345,67890,12345,67890
12345,67890,12345,67890
12345,67890,12345,67890
12345,67890,12345,67890

私はすべての行について、最初のカンマをスペースに置き換え、残りのカンマをそのままにしておきたいと思います。最初のカンマだけにマッチする正規表現はありますか?

私はこれを試してみました: ^.....,. これはカンマにマッチしますが、カンマの前の文字列の全長にもマッチします。

Advertisement
Advertisement

回答 (6)

55
55
55
2011-04-05 06:26:54 +0000

マッチングパターンは次のようになります:

^([^,]+),

つまり

^ starts with
[^,] anything but a comma
+ repeated one or more times (use * (means zero or more) if the first field can be empty)
([^,]+) remember that part
, followed by a comma

などの perl では、全体のマッチと置換は次のようになります:

s/^([^,]+),/ /

置換部分は、マッチした全体を取り、あなたが覚えている最初のブロックに置き換え、スペースを追加するだけです。コマは最初のキャプチャグループに入っていないので「ドロップ」されます。

7
7
7
2012-08-01 21:31:36 +0000

デ フ ォル ト では (すなわち、 g オプシ ョ ンがない場合)、 最初のマッチだけが置き換えられます。

3
Advertisement
3
3
2011-04-05 06:26:08 +0000
Advertisement

これは、最初の数字とカンマ: ^(\d{5}), にのみマッチします。行内の他のすべての数字を読み取る場合は、正規表現を次のように変更してください: ^(\d{5}),(.*)$

2
2
2
2015-05-13 00:44:34 +0000

よりエレガントな解決策は、遅延マッチングを使用することです:

s/^(.+?),/ /

は、最初のカンマ記号を見つけるまでの各ステップで、文字列の先頭(^)から最後に向かって***文字(.+?)を1つずつ移動することによって文字をグループ化します。最初のカンマの出現と共にこのグループはすべてグループ(“)とスペース文字によって置き換えられます。

1
Advertisement
1
1
2015-02-28 21:07:59 +0000
Advertisement

TextPad には常に posix 記法を使用する機能がありましたが、設定を変更するには別のダイアログボックスで変更する必要があります。

^\([0-9]+\)[]

タブ付き \t

002 上記のように、^は行頭を意味します

( は「エスケープされた括弧」であり、最初の検索式の始まりを示します。The five digits [0-9]+ は、1つ以上の数字を意味します(5桁の郵便番号だけではありません)。 -)

置換式では

\1 は最初の検索式で、上記の括弧の間の部分 (1 つ以上の数字)

\t はタブ文字です

だから、search and replace コマンドは、1 つ以上の数字を探して、その後にスペースが続きます。

単純に「5桁の数字の後に来るスペース」を探すだけの方法はないと思うので、数字に触れずにスペースだけを置き換えることができます。5桁の数字(最初の文字列)の後にスペース(2番目の文字列)が続くのを**見つけなければなりません。そして、冗長というか面倒くさいようですが、元の5桁の文字列をITSELFに置き換えて、タブ(2番目の文字列)が続くようにします。

これを知っている人はみんな、初心者はこのことを知らないことを忘れています。だからこそ、私はあなたのためにそれを綴っているのです。

Ed Poor Math Tutor and retired Computer Programmer New York City

0
0
0
2019-11-26 19:24:16 +0000

正規表現の最初に出現したものだけにマッチさせるには、すべてのフラグを削除します。それぞれの正規表現には次のようなフラグがあり、通常は複数の出現にマッチするグローバルフラグを使用するのがデフォルトです:

  • /g = このフラグがある場合、検索はすべてのマッチを探しますが、ない場合は最初のマッチのみが返されます
  • /i = 大文字小文字を区別しません
  • /m = 複数行モード
  • /s = すべての .改行文字にマッチします
  • /u = unicode
  • /y = スティッキーモード (特定の場所で検索します)
Advertisement

関連する質問

14
3
12
4
5
Advertisement