2012-07-05 121 views

回答

3

尝试

q = "today(Thursday)^05^*07*[2012]" 
import re 
print re.findall(r'\w+', q) # ['today', 'Thursday', '05', '07', '2012'] 
+0

**必须不匹配 – 2012-07-05 12:27:56

+2

@burning_LEGION:更容易在事后丢弃它比弄乱的正则表达式,使其不能在第一时间相匹配。 – 2012-07-05 12:34:20

+0

mb ...但并不总是 – 2012-07-05 12:36:40

0

使用这个表达式:

(?<=\()(.+)(?=\))|(?<=\^)(.+)(?=\^)|(?<=\*)(.+)(?=\*)|(?<=\[)(.+)(?=\]) 
+0

不清楚。我将如何使用它? – Pavan 2012-07-05 12:29:58

+0

'Q = “今日(星期四)^ 05^* 07 * [2012]” 进口重新 打印re.findall(R'(<= \()(+)(= \))|??(? <= \ ^)(+)(= \ ^)|?(<= \ *)(+)(= \ *)|???(<= \ [?)(+)(= \] )' ',q) – 2012-07-05 12:30:34

+0

错误:输入 – Pavan 2012-07-05 12:32:41

0

使用字符串分隔符。

string.split[^*]

+0

你试过这个解决方案吗? – Levon 2012-07-05 12:29:02

+0

是的,我做到了。它虽然乏味。必须申请所有特殊字符。 – Pavan 2012-07-05 12:35:00

+0

第一个答案很不错。所以去了那个。无论如何,谢谢:) – Pavan 2012-07-05 12:40:49

2

另一种选择(虽然我更喜欢@thg435 solution):

r=re.split('[\^*()[\]]', q) #['today', 'Thursday', '', '05', '', '07', '', '2012', ''] 

然后

r[1::2] 

产量

['Thursday', '05', '07', '2012'] 

Aside:有谁知道我为什么得到交错的空字符串?易于工作,但最好不要让他们摆在首位。今天

+0

这也适用。谢谢:) – Pavan 2012-07-05 12:52:58

+0

为了避免出现空字符串,可以在字符类中加'+',否则会匹配两个相应的分隔符之间的空字符串。 – georg 2012-07-05 14:02:36

+0

@ thg435感谢您的建议..我一直在寻找这些空字符串的原因。将'+'添加到''[+ \^*()[\]]''仍然不适用于我: -/- 我错过了什么?我认为这一定是明显的。 – Levon 2012-07-05 14:08:15