2010-10-21 161 views
0

我试图一行一行地检查文件any_string = any_string。它必须是那种格式,没有空格或其他任何东西。该行必须包含一个字符串,然后是“=”,然后是另一个字符串,而不是别的。有人可以帮我用python的语法来找到这个吗? =]Python:模式匹配的字符串

pattern='*\S\=\S*' 

我有这个,但林肯定它错了,哈哈。

+0

你打算如何使用该模式? – 2010-10-21 06:46:19

+1

另外,我认为这是一个比Python问题更多的正则表达式问题。只是说! – Chetan 2010-10-21 06:47:59

+0

@chetan:你好点。哈哈 – nubme 2010-10-21 07:54:10

回答

4

不知道您是否正在寻找在=两侧具有相同值的线。如果是,则使用:

the_same_re = re.compile(r'^(\S+)=(\1)$') 

如果值可以不同,然后用

the_same_re = re.compile(r'^(\S+)=(\S+)$') 

在这种regexpes:

  • ^是线
  • $的开头是行结束
  • \S+是一个或更多的非空格字符
  • \1是第一组的正则表达式的字符串的意思是“原始”的字符串

r之前,所以你不需要逃避串反斜杠。

+0

谢谢!定义每个表达式的作用也会有很大帮助=] – nubme 2010-10-21 07:09:15

+0

您给我的代码有效,但我如何匹配一个'='? (r'^(\ S +)= {1}(\ S +)$') 似乎不起作用 – nubme 2010-10-21 07:44:46

+1

尝试:'r'^([^ = \ s] +)=([^ = \ s] + )''''''''括号内'^'不包括字符,在本例中它不包括'='和空格('\ s') – 2010-10-21 09:01:53

1
pattern = r'\S+=\S+' 

如果你希望能够抓住左,右手边,您可以添加捕获组:

pattern = r'(\S+)=(\S+)' 

如果你不想让多个等号的行(这将做怪异的事情),你可以使用这个:

pattern = r'[^\s=]+=[^\s=]+' 
+0

谢谢,雅我可能需要捕捉它以供以后使用soo .. pattern = r'([^ \ s =])+ =(^ \ s =] +)' – nubme 2010-10-21 07:04:54

1

我不知道你想要什么使用这种模式的任务。也许你想解析配置文件。 如果这是真的,你可以使用模块ConfigParser。

1

好的,所以你想找到anystring=anystring,没有别的。那么不需要正则表达式。

>>> s="anystring=anystring" 
>>> sp=s.split("=") 
>>> if len(sp)==2: 
... print "ok" 
... 
ok 
+0

这将找到任何一行“=”在里面。可能需要检查两个部件是否都是空的。 – neil 2010-10-21 09:28:01

1

由于Python 2.5我更喜欢这样分裂。如果你不喜欢空间,只需检查。

left, _, right = any_string.partition("=") 
if right and " " not in any_string: 
    # proceed 

此外,它永远不会学会正则表达式。