如何从python Regex中的给定字符串中提取特定长度的字符

时间:2016-11-29 11:42:05

标签: python regex

如何从python Regex中的给定字符串中提取特定长度的字符

您好我有记录,

例如:

  1. 健康保险便携性比率
  2. 健康保险便携性NGRatio
  3. 健康保险可携带性NEGRatio
  4. 这里我需要提取NEG作为我在python中编写正则表达式,如

    `uRegDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
    

    我的第一个“NEG”之后便携性是我应该得到的价值。第一个和第二个记录给出正确的输出为“NEG”。但在我的第三张唱片中,我得到的是“NEG NEG”,这是一个错误的值。

    我还需要获得第三个记录的“NEG”。我应该给出前三个字符的长度只取“NEG”。 如果是这样,请告诉我如何根据这个来编写正则表达式?

2 个答案:

答案 0 :(得分:0)

.表示任何字符,+符号表示“至少一个”,但未指定上限。您需要\w{n},其中\w表示字符,n表示出现次数。

另请注意,\w包含算术数字,因此如果您只想要字母,最好使用[a-zA-Z]{3}

答案 1 :(得分:0)

如果您必须在Portability使用后立即提取任何 3个字符

re.findall(r"Portability(.{3}).*?Ratio", s)

请参阅regex demo

如果这些是大写字母,请将.{3}替换为[A-Z]{3}

<强>详情:

  • Portability - 文字字符序列
  • (.{3}) - 捕获第1组:正好3个字符(如果未使用re.S / re.DOTALL修饰符,则除了换行符之外的任何字符),因为{3}是一个限制量词匹配{...}
  • 中定义的出现次数
  • .*?Ratio - 除了换行符之外的任何0 +字符尽可能少(因为*?是一个惰性量词)直到第一个Ratio子字符串。

re.findall仅返回捕获的值,因此您只能获得NEG