我们刚刚开始学习正则表达式,但是当我尝试使用正则表达式进行搜索时,无法在字符串中找到任何匹配项。我做错什么了?你知道吗
我创建了六个单独的字符串(只是为了看起来),并将它们连接成一个字符串,然后我尝试循环遍历拆分字符串中的单词,并搜索我声明的一个正则表达式
下面,我翻译了右边的字符串,让你知道它说了什么。你知道吗
myString1 = "Skal vi moetes neste torsdag?" # - Shall we meet next Thursday
myString2 = "Hva med aa heller moetes mandag?" # - How about Monday
myString3 = "Hvordan gikk moetet forrige mandag?" # - How did the meeting on monday go?
myString4 = "Det gikk bra, vi skal moetes igjen tirsdag onsdag fredag lørdag søndag 13. september." # - It went well, we are meeting again on Sunday September 13th.
myString5 = "Altsaa, 13/09/2014?"
myString6 = "Ja, Sunday 13. september 2014." # - Yes, Sunday, September 13th 2014
myStringAll = (myString1 + myString2 + myString3 + myString4 + myString5 + myString6)
myWords = myStringAll.split()
regWeekDays = re.compile(r'^(man|tirs|ons|tors|fre|lør|søn)dag$', re.IGNORECASE)
regNextLast = re.compile(r'^[neste].$', re.IGNORECASE)
regDay = re.compile(r'^([0-2][0-9]|3[0-1])$')
regYear = re.compile(r'^([1-2][0-9][0-9][0-9])$')
for words in myWords:
matches = re.findall(regNextLast, words)
if matches:
print words
r'^[neste].$'
可能不是你的意思。此正则表达式查找长度为两个字符的字符串,其中第一个字符是in ('e', 'n', 's', 't')
,后跟任何其他单个字符。从较大的字符串中拆分出来的两个字符子字符串都不符合此模式。你知道吗也许你可以从教程中受益:http://www.regular-expressions.info/tutorial.html
正则表达式有几个问题,但主要的问题是在每个表达式的开头和结尾使用
^
和$
。^
表示匹配字符串的开头,$
表示匹配字符串的结尾。除非字符串的长度与表达式的长度严格匹配,findall
将不会匹配任何内容。你知道吗一个例子:
^
和$
应分别用于显式匹配字符串的开头和结尾(或在某些情况下,请参见documentation)。去掉这些,你的表达式就应该开始匹配了。你知道吗以下是一些更具体的问题:
^(man|tirs|ons|tors|fre|lør|søn)dag$
中,findall只捕获并返回第一部分(man|tirs|ons|tors|fre|lør|søn
)。将其更改为non capturing group,以便返回整个表达式:(?:man|tirs|ons|tors|fre|lør|søn)dag
^[neste].$
中,我假设您想要捕获字符串"neste"
。当前您有一个集[neste]
,它将匹配以下字符中的一个:n
、e
、s
或t
。将其更改为neste
。关于集合的文档可以在here中找到。你知道吗
^([0-2][0-9]|3[0-1])$
基本上是好的,除了^
和$
,您可以省略0
和1
之间的连字符,排除括号,并使用数字符号\d
(相当于[0-9]
,但是:^{
'^([1-2][0-9][0-9][0-9])$'
(同样,除了^
和$
)中,表达式应该像预期的那样工作,但是您可以使它更加简洁。可以使用curly bracket syntax指定重复。因此,匹配1000-2999之间任何年份的字符串变为:[12]\d{3}
我建议你仔细阅读HOWTO on Regular Expressions。你知道吗
相关问题 更多 >
编程相关推荐