python - 如何在Python正则表达式中搜索至少两个组之一,同时还要寻找必须的第三组?

标签 python regex regex-group

我正在尝试使用正则表达式来查找程序中误用的运算符。

具体来说,我试图找出某些运算符(例如 %、$ 和 @)是否在使用时两侧没有数字。

以下是一些滥用的示例:

'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()'

Regex demo | Python demo

[^\d.]不匹配数字或文字点。 ^里面 character class否定了它所包含的内容。但如果字符串的第一个字符不是数字或点,那么它将匹配。

关于python - 如何在Python正则表达式中搜索至少两个组之一,同时还要寻找必须的第三组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53915246/

相关文章:

python - 如何在 python 中添加/替换文件扩展名?

python - Flask + Wsgi + Docker - 尚未安装用户加载程序

r - 如何使用 gsub 在 for 循环中找到精确匹配?

regex - Notepad++正则表达式替换命名组

python - yum 找不到 libpython2.7.so.1.0()(64bit)

python 刽子手不透露字母

.net - 原子量化组与量化原子组的含义相同吗?

regex - HT 访问拼图!为什么 "?"在一个 Rewrite 语句中有效,而在另一条语句中无效?参见示例

.net - 正则表达式组字符串,其中分隔符可以使用两次(.net 正则表达式)

用于通过特定字符分隔条目的正则表达式