正则表达式以匹配特定模式

时间:2016-10-13 15:04:39

标签: python regex

我有以下字符串:

s = "<X> First <Y> Second"

我可以在<X><Y>之后匹配任何文本(在本例中为“First”和“Second”)。这就是我已经做到的:

import re
s = "<X> First <Y> Second"
pattern = r'\<([XxYy])\>([^\<]+)'  # lower and upper case X/Y will be matched
items = re.findall(pattern, s)
print items
>>> [('X', ' First '), ('Y', ' Second')]

我现在要匹配的是没有<>的情况:

s = "X First Y Second"

我试过了:

pattern = r'([XxYy]) ([^\<]+)'
>>> [('X', ' First Y Second')]

不幸的是,它没有产生正确的结果。我究竟做错了什么?我想匹配X或x或Y或y PLUS一个空格(例如“X”)。我怎么能这样做?

编辑:这也是一个可能的字符串:

s = "<X> First one <Y> Second <X> More <Y> Text"

输出应为:

 >>> [('X', ' First one '), ('Y', ' Second '), ('X', ' More '), ('Y', ' Text')]

EDIT2:

pattern = r'([XxYy]) ([^ ]+)'
s = "X First text Y Second"

产生

[('X', 'First'), ('Y', 'Second')]

但它应该是:

[('X', 'First text'), ('Y', 'Second')]

4 个答案:

答案 0 :(得分:2)

如何:<?[XY]>? ([^<>XY$ ]+)

javascript中的示例:

const re = /<?[XY]>? ([^<>XY$ ]+)/ig

console.info('<X> First <Y> Second'.match(re))
console.info('X First Y Second'.match(re))

答案 1 :(得分:1)

如果您知道要匹配哪个空白字符,则可以将其添加到表达式中。 如果要匹配任何空格,可以使用\ s

pattern = r'\<([XxYy])\>([^\<]+)'

然后

pattern = r'\<([XxYy])\>\s([^\<]+)'

请记住,()中的表达式将作为结果返回。

答案 2 :(得分:1)

假设要匹配的空白标记是单个空格字符,则模式为:

pattern = r'([XxYy]) ([^ ]+)'

答案 3 :(得分:0)

所以我提出了这个解决方案:

pattern = r"([XxYy]) (.*?)(?= [XxYy] |$)"