[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『正規表現について』(T1511)
文字列操作で「正規表現」がわからずお助けください。
問い)
下記の文章で最後の「▼○○」を表現する正規表現は?
例文
△△▼○○▼□□▼○○
説明
・△、□、○は任意の文字列です(文字種、文字長は不定です)
・区切り記号として「▼」を使用しています
・「△△▼○○▼□□▼○○」を「△△▼○○▼□□」に修正する
マクロを検討中ですが、いきなり躓いています..
よろしくお願いします。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
Sub test() Dim cw As String
cw = "△△▼○○▼□□▼○○" If cw Like "*▼○○" Then cw = Left(cw, Len(cw) - 3) End If MsgBox cw End Sub (???) 2015/11/20(金) 17:38
よくわかりませんが、末尾の ▼○○
▼ は、実際にはどんな文字ですか? 実際に ▼なんですか? それと ○○ は、桁数としては 2桁と限ったことではないということですか? それとも 2桁? また、文字列の内容も可変?
2桁で、文字列の内容も固定なら、何も正規表現を持ち出すまでもなく、(???)さんの回答で解決だと思いますが?
(β) 2015/11/20(金) 17:51
実際の仕様がいまいちわからないところもありますが
Sub Test() Dim s As String Dim re As Object Dim mt As Object
s = "△△▼○○▼□□▼○○"
Set re = CreateObject("VBScript.RegExp") re.Pattern = "▼[^▼]+$" Set mt = re.Execute(s) If mt.Count > 0 Then MsgBox mt(0).Value & vbLf & "開始位置:" & mt(0).firstindex + 1 & vbLf & "桁数:" & mt(0).Length MsgBox "結果:" & Left(s, mt(0).firstindex) End If
End Sub
(β) 2015/11/20(金) 17:58
こんなのでも、充分かも。
Sub Test2() Dim s As String Dim w As Variant
s = "△△▼○○▼□□▼○○"
w = Split(s, "▼") ReDim Preserve w(0 To UBound(w) - 1)
MsgBox Join(w, "▼")
End Sub
(β) 2015/11/20(金) 18:03
正規表現なら
Sub test() With CreateObject("VBScript.RegExp") .Pattern = "[^▼]+(?!.)" MsgBox .Replace("△△▼○○▼□□▼○○", "") End With End Sub (seiya) 2015/11/20(金) 18:14 チョイ修正 20:25
あぁ、Replace ですね。あまり使わないので、思いつきませんでした。
Sub Test3() Dim s As String Dim re As Object Dim mt As Object
s = "△△▼○○▼□□▼○○"
Set re = CreateObject("VBScript.RegExp") re.Pattern = "▼[^▼]+$" MsgBox re.Replace(s, "")
End Sub
(β) 2015/11/20(金) 19:10
みなさん、ありがとうございます。
時節柄、 今、 ちょっと思考がついていけないため、
日を改めて確認させていただきます。 スミマセン...
(T1511) 2015/11/20(金) 21:53
正規表現を使った案がたくさん提示されていて勉強になります。
余談です。
私は、最初に見たとき、こんな解釈をしてしまいました。
「▼」を区切り文字と考え、同一内容が出てきたら、後のほうを消去したい。
これなら正規表現を使いたくなるかもしれないと思いました。
(γ) 2015/11/21(土) 08:44
もし、γさんコメントの様に、区切り文字で区切られた文字列の重複を削除して一意化するとすれば こんなコードでもできますね。
Sub Test4() Dim w As Variant Dim d As Variant
w = Split("△△▼○○▼□□▼○○", "▼")
With CreateObject("Scripting.Dictionary") For Each d In w .Item(d) = True Next MsgBox Join(.keys, "▼") End With
End Sub
(β) 2015/11/21(土) 18:24
ユニーク値を抽出
Sub tests() Dim txt As String txt = "△△▼○○▼□□▼○○▼△△▼□□" With CreateObject("VBScript.RegExp") .Pattern = "(.*)([^▼]+)(.*)(▼\2)(▼.*)*$" Do While .test(txt) txt = .Replace(txt, "$1$2$3$5") Loop MsgBox txt End With End Sub (seiya) 2015/11/21(土) 19:28
質問を補足しますと、“備忘録”として書き留めていたファイルに、
誤って文末に入力した文章を一括削除するのが最終目的です。
備忘録への新規登録は行を新たに追加したり、入力済みの行末に
追加したりしますが、必ず「▼」を区切りとして一緒に入力しており
これを目印に何とかしたいという思いでした。
単なる風邪と思っていたのがインフルで..(まだ頭がボ〜としてますが)
確認〜お礼が遅れてスミマセンでした。
これからもよろしくお願いします。
(T1511) 2015/11/24(火) 11:07
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.