Python:匹配&从套接字数据中剥离端口号

时间:2010-03-17 18:04:32

标签: python sockets

我有数据通过套接字进入python服务器。在这个数据中是字符串'<port>80</port>'或正在使用的端口。

我希望将端口号提取到变量中。进来的数据不是XML,我只是使用标记方法来识别数据,以备将来使用XML。我不想使用XML python库,只是使用像regexp和strings这样的东西。

您建议哪种方式匹配和删除此数据?

我目前正在使用此代码而没有运气:

p = re.compile('<port>\w</port>')
m = p.search(data)
print m

谢谢:)

2 个答案:

答案 0 :(得分:1)

Regex无法解析XML,也不应该用于解析 XML。你应该做一个

  • 使用更好的序列化方法,例如JSON或带有ConfigParser模块的ini文件。
  • 真正使用XML ,而不是那些看起来像XML的东西,而真的用lxml.etree之类的东西解析它
  • 如果这是您的整个配置,只需将该号码存储在文件中即可。这个解决方案并不比仅使用JSON或其他东西容易,但它比当前的解决方案更好。

现在为了将来无需定义或准确预测的需求而实施一个糟糕的解决方案始终是一个糟糕的方法。您将一直忙于尝试编写和维护现在的软件,没有充分的理由去尝试满足未知的未来需求。我从来没有见过一个案例,“我会把它放进去以后”导致后来不那么头疼,特别是当我通过做一些完全错误的事情把它放进去的时候。 YAGNI!

除了使用完全错误的方法之外,你的代码片段有什么问题,有角度的括号在正则表达式中有意义。

答案 1 :(得分:0)

虽然Mike Graham是正确的,但不推荐使用正则表达式xml,以下内容将起作用:

(I have defined searchType as 'd' for numerals)
searchStr = 'port'

if searchType == 'd':
    retPattern = '(<%s>)(\d+)(</%s>)'
else:
    retPattern = '(<%s>)(.+?)(</%s>)'

searchPattern = re.compile(retPattern % (searchStr, searchStr))
found = searchPattern.search(searchStr)
retVal = found.group(2)

(注意完全没有错误检查,留作用户的练习)