首页 > 解决方案 > 用于匹配字符串的正则表达式加上子字符串的第一次出现

问题描述

我正在寻找解决以下问题的正则表达式。在下面的示例中,我正在提取值VITMINC

测试字符串

1. As VITMINC##1-0-1##1 days.As
2. amlodipine ##vitamin c##diclo##tabramycin eye drop##metformin##0-0-1##15 days. amlodipine ##1-0-1## 3 days.
3. Xylometazoline(P) Nasal drops##0-1-0##2 days.   Paracetamol 500mg tab##0.5-0-0-0##2 days. VITMINC##0.5-0-0##2 days.   Chlorpheniramine maleate 4mg tab##0-1-0##2 days.
4. VITMINC##0-0-0-1##2 days.
5. amlodipine##vitamin c##diclo##tabramycin eye drop##metformin##0-0-1##15 days.

上述字符串的示例输出

1. VITMINC##1-0-1##1 days
2. ##vitamin c##diclo##tabramycin eye drop##metformin##0-0-1##15 days
3. VITMINC##0.5-0-0##2 day
4. VITMINC##0-0-0-1##2 days
5. vitamin c##diclo##tabramycin eye drop##metformin##0-0-1##15 days

我正在尝试使用下面的正则表达式,但没有得到预期的输出

VITMINC##.*##([0-9]+ [days]){1}?
VITMINC##.*##([0-9]+ [days])*?
VITMINC##.*##[0-9]+ days
VITMINC##.*##([0-9]+ days){1}?

对不起,如果我的解释不好。并提前感谢。

标签: pythonregexregex-negationregex-greedy

解决方案


假设您实际上不想#在比赛开始时使用字符(示例 2 和 5 是自相矛盾的),您可以使用

(?i)VITA?MIN\s*C##.*?##[0-9]+ days

请参阅正则表达式演示

细节

  • (?i)- 不区分大小写的修饰符
  • VITA?MIN-VITAMINVITMIN
  • \s*- 0 个或多个空格
  • C##- 一个C##子串
  • .*?- 除换行符之外的任何零个或多个字符,尽可能少
  • ##- 一个##子串
  • [0-9]+ days- 1 个或多个数字、空格、days子字符串。

推荐阅读