現在、入力されたテキストから、正規表現を使って少しの文字の違いを許容し、テキストを複数ある中からこれだと判定する仕組みを作りたいと思っています。
具体的には、ゲームの武器名などが格納されており、例えば
bb-4というものであれば、
"bb(-|\s)?(4)?"
として正規表現で書いています。(誤差を考慮して-が空白でも,後の数字がなくてもマッチする)
そしてその格納されている中に"bb4-aim"という名前のものもあります。( "bb4(-|\s)?aim" )
マッチしたあとの文字列から、一つの武器名に対して一意に決められる番号を取得するのも困難だと考え、(?P<>)を使用して書くことでマッチした文字列の武器の番号も同時に取得できるようにしてみました。
そして,これらの正規表現を|でつなぎ,
python
1pattern = "|".join(上で示したようなものが複数ある正規表現のリスト) 2match_obj = re.search(pattern, "入力されたテキスト", re.IGNORECASE) 3match_dict = match_obj.groupdict() 4item_dict = {k: v for k, v in match_dict.items() if v is not None} # 値がNoneのものを取り除く 5# item_dictのキーがマッチした武器名の一意に決められる番号,値がマッチしたテキスト
このように書いたのですが,これでは"bb4-aim"と入力してもbb4でマッチしてしまうことに気づきました。bb4のもとのbb4-aimのものの順番を入れ替えればよいのですが、これらは番号順に並べていることもあり、さらに複雑になりそうなので困っています。
色々考えた末このような方法ですることとしたのですが、改善策や、他の手段があれば教えていただきたいです。
Python3.7です。
-- 追記 --
素朴にfor文ですべての正規表現を回して、試したのですが思っていたより高速で、私の場合これでも十分な気がしてきています。もし、このような方法以外に良いものがあればぜひ紹介していただきたいです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。