Python Regex象征无限数量的字符

时间:2018-11-11 11:54:10

标签: python regex

我试图弄清楚如何在python中表示以下正则表达式:

找到的第一次出现 CREATE PROC dbo.Usp_Contentment AS begin declare @ErrMsg NVARCHAR(MAX) = '' IF not exists (select 1 from dbo.Question where QuestionId= @QuestionId) set @ErrMsg = 'Some msg' if not exists (select 1 from dbo.Employee where Employee Id= @EmployeeId) set @ErrMsg =@ErrMsg + 'some msg' IF @msg='' INSERT INTO dbo.contentment (employeeid, questionid, date, score, comment) VALUES (@employeeID, @questionid, null, null, null) else RAISERROR(@ErrMsg,16,1) end

例如:

{any character that isn't a letter}'{unlimited amount of any character including '}'{any character that isn't a letter}

我的问题是如何实现中间部分?如何找到数量不限的字符,直到找到最后的模式(`_)?

1 个答案:

答案 0 :(得分:0)

您可以通过几种不同的方式来表示无限数量的字符:

  • *:前面的字符(贪婪)为零个或多个
  • +:前面的一个或多个字符(贪婪)
  • *?:前面的字符为零或多个(非贪婪)
  • +?:前面的一个或多个字符(非贪婪)

“贪心”表示将匹配尽可能多的字符。 “非贪婪”表示将匹配尽可能少的字符。 (有关贪婪和非贪婪的更多说明,请参见this answer。)

在您的情况下,听起来您想匹配一个或多个字符,并且匹配不贪心,因此您需要+?

在Python代码中:

import re
my_regex = re.compile(r"\W'[^']+?'\W")
my_regex.search("She said 'Hello There!'.")

此正则表达式与您的第二个示例'I've been sick' and then...不匹配,因为第一个'之前没有非单词字符。