2

我已经用Python编写了一个XML 解析器,并且刚刚添加了从不同目录读取更多脚本的功能。

我有两个参数,第一个是我解析 XML 的路径。第二个是另一个 XML 文件中的字符串,我想与第一个路径匹配;

arg1 = \work\parser\main\tools\app\shared\xml\calculators\2012\example\calculator
path = calculators/2012/example/calculator

如何比较这两个字符串以匹配确定它们都引用相同的东西,以及如何calculator从任何一个字符串中剥离,以便我可以存储并使用它?

编辑

刚刚有一个想法。year = re.findall(r"\.(\d{4})\.", path)在将路径转换为导入语句时,我已经使用正则表达式来解决 Python 在数字方面遇到的问题。

我显然可以拆分字符串并使用正则表达式将路径匹配为 arg1 中的模式,但这似乎还有很长的路要走。肯定有更好的方法吗?

4

3 回答 3

2

在这里,我假设您实际上是在谈论字符串,而不是文件路径-@mgilson 的建议更好

如何比较两个字符串以匹配确定它们都引用相同的东西

那么首先你需要确定你所说的“同一件事”是什么意思

乍一看,如果第二个字符串以带有反斜杠的第一个字符串结尾,那么您就有了匹配项。

arg1 = r'\work\parser\main\tools\app\shared\xml\calculators\2012\example\calculator'
arg2 = r'calculators/2012/example/calculator'

>>> arg1.endswith(arg2.replace('/','\\'))
True

而且,我怎样才能从任一字符串中删除计算器,以便我可以存储并使用它?

您还需要决定是否要删除第一个计算器、最后一个计算器或字符串中出现的任何计算器

如果您只想删除分隔符后的最后一个字符串,那么它很简单:

>>> arg2.split('/')[-1]
'calculator'

现在要取回原始字符串,没有最后一点:

>>> '/'.join(arg2.split('/')[:-1])
'calculators/2012/example'
于 2012-06-12T13:47:51.190 回答
2

退房os.path.samefile

http://docs.python.org/library/os.path.html#os.path.samefile

os.path.dirname

http://docs.python.org/library/os.path.html#os.path.dirname

或者也许os.path.basename(我不确定您要保留字符串的哪一部分)。

于 2012-06-12T13:19:03.730 回答
1

在这里,试试这个:

arg1 = "\work\parser\main\tools\app\shared\xml\calculators\2012\example\calculator"
path = "calculators/2012/example/calculator"

arg1=arg1.replace("/","\\")
path=path.replace("/","\\")
if str(arg1).endswith(str(path)) or str(path).endswith(str(arg1)):
    print "Match"

这应该可以满足您的需求。干杯:)

于 2012-06-12T13:49:51.380 回答