我正在尝试使用正则表达式来查找程序中误用的运算符。
具体来说,我试图找出某些运算符(例如 %、$ 和 @)是否在使用时两侧没有数字。
以下是一些滥用的示例:
'5%'
'%5'
'5%+3'
'5%%'
有没有办法通过一次研究就能做到这一点?
我知道我可以使用 + 表示至少 1,或使用 * 表示至少 0, 但看看:
([^\d]*)(%)([^\d]\*)
我想查找至少存在 group(1) 和 group(3) 之一的情况,
因为在 % 两侧插入数字是运算符的一个很好的用途。
我知道我可以使用:
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.] 时,这是否包括字符串的开头和结尾?或者只是不同的字符?
谢谢:)
最佳答案
您可以使用 alternation使用负前瞻和负后瞻来断言之前的内容和之后的内容不是数字:
(?<!\d)[@$%]|[@$%](?!\d)
将匹配:
-
(?<!\d)
负向后查找检查左边的内容不是数字 -
[@$%]
字符类,匹配@
之一,$
或%
-
|
或者 -
[@$%]
字符类,匹配@
之一,$
或%
-
(?!\d)
负向前视检查右侧的内容不是数字
例如:
match = re.search(r'(?<!\d)[@$%]|[@$%](?!\d)', user_request)
if match:
return 'Illegal use of match.group()'
[^\d.]
不匹配数字或文字点。 ^
里面 character class否定了它所包含的内容。但如果字符串的第一个字符不是数字或点,那么它将匹配。
关于python - 如何在Python正则表达式中搜索至少两个组之一,同时还要寻找必须的第三组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53915246/