実現したいこと
ある文字列(例えば QWERTY とします)から1文字だけ置換された文字列を正規表現で検索したいです。
例えば
(マッチする文字列)
QWERTQ
AWERTY
QWERYY
QWEETY
(マッチしない文字列)
QWERQQ:2文字異なる
QWERTYT:置換ではない。文字数が異なる
QWER :文字数が異なる。
愚直に書くと以下の様になります、シンプルに表現する方法はありますか?
(AAAAA.?)|(AAAA.?A)|(AAA.?AA)|(AA.?AAA)|(A.?AAAA)|(.?AAAAA)
環境、言語は特に指定するものではありませんが、pythonで実装しています。
正規表現以外の方法ではダメなのでしょうか?
正規表現を固定ではなく文字列に合わせて自動生成するのが良いと思います。
つまり、質問に掲載されているようなものを自動的に作成すると良いでしょう。
具体的には、与えられた文字列を各文字に分解し、それをエスケープした文字列とドットから全ての組み合わせを生成し、それを垂直バーで連結します。
わざわざ正規表現を使用しなくても、先頭から1文字ずつ評価するユーザー関数を用意すれば良いだけのような気がします。
. でなく .? なので、正規表現の方が簡単になりそうな気がします。完全一致ではなく文字列中から検索しなければならないとしたら特に。
> . でなく .? なので
いや「文字数が異なる」がNGなら「.?」ではないですね質問者さんの正規表現への理解が低いだけだと思います
文字数が異なるのは二文字違うからだと理解していました。その上を見ると一文字違いでも違うとみなされていますね。同じ文字数なら順に比べて二文字以上違わなければマッチしたとみなせば確かに簡単ですね。
「.?」ではなく[.]の誤りです。
モチベーションのひとつに正規表現を利用可能な検索サイトで、当該検索を行うことだったのでユーザー関数はその場合適していないと考えていました。
ベストアンサーの回答はマッチに関数を使ってますが。
「.」だと「1文字だけ置換された文字列」は拾えませんよ
同じでもヒットしますので
>yambejp
記載忘れていましたが、同じでも問題ありません
>Zuishin
[モチベーションのひとつ]
ロジックの苦手な人はプログラミングに向きません。
関数でいいなら関数でいいはずです(小泉構文)。
質問に関係のない主義主張は他所でお願いします。
関係は大ありですが、理解できないなら書くのはやめましょう。何か返信が欲しいなら続きをどうぞ。不要ならそのまま何も書く必要はありません。
[ロジックの苦手な人はプログラミングに向きません。]が質問に関係のない主義主張に該当すると判断します。
私の言ったことが理解できないので説明が欲しいということですか?
それなら返事をしてください。
不要なら何も書く必要はありません。
これ以上何も書かないでください。
そのように何度も書いていますが、まだ何か?
これ以上何も書かないでください。

回答2件
あなたの回答
tips
プレビュー