プログラムで誤用されている演算子を見つけるために正規表現を使用しようとしています。
具体的には、いくつかの演算子(%、$、@など)が両側に数字を付けずに使用されているかどうかを調べようとしています。
誤用の例を次に示します。
'5%'
'%5'
'5%+3'
'5%%'
1回のre.searchでそれを行う方法はありますか?
+を少なくとも1つ、または*を少なくとも0に使用できることはわかっていますが、次のことを確認してください。
([^\d]*)(%)([^\d]\*)
group(1)とgroup(3)の少なくとも1つが存在する場合を見つけたいと思います。
なぜなら、両側に数字を含む%を挿入することは、演算子の良い使い方だからです。
私は使用できることを知っています:
match = re.search(r'[^\d\.]+[@$%]', user_request)
if match:
return 'Illegal use of match.group()'
match = re.search(r'[@$%][^\d\.]+', user_request)
if match:
return 'Illegal use of match.group()'
しかし、私は単一のre.search行でそうすることを好みます。
また、[^ \ d。]を使用すると、これには文字列の先頭と末尾が含まれますか?それとも別の文字だけですか?
ありがとうございました :)
負の先読みと負の後読みの交互を使用して、前と後が数字ではないことを表明できます。
(?<!\d)[@$%]|[@$%](?!\d)
それは一致します:
(?<!\d)
左側にあるものをチェックするためのネガティブルックビハインドは数字ではありません[@$%]
文字クラス、のいずれかに一致@
、$
または%
|
または[@$%]
文字クラス、のいずれかに一致@
、$
または%
(?!\d)
右側にあるものを確認するための否定的な先読みは数字ではありません例えば:
match = re.search(r'(?<!\d)[@$%]|[@$%](?!\d)', user_request)
if match:
return 'Illegal use of match.group()'
[^\d.]
数字またはリテラルドットに一致しません。文字クラスの^
内部は、含まれているものを否定します。ただし、数字でもドットでもない文字列の最初の文字である場合は、一致します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加