在Python上,假设我有一个字符串,它代表一个字符串模式,如:
myString = "//command -name two -parent one [...]"
其中[...]
表示 -arg 和值的序列。
如何从字符串中提取特定内容? 例如,我想提取单词:
wordsExtracted = ['command', 'name', 'two', 'parent', 'one', ... ]
...
的含义...... 你知道什么意思!
我认为检索它的最佳方法是使用 RegEx ,对吧?
另一种方法是使用'//'和' - '进行分割,但我认为这不是一种优雅的方式。
那么......我怎么能做我想做的事?
答案 0 :(得分:1)
我确定还有其他解决方案,但是如果你想使用正则表达式,这样的模式就可以了
\w+
这将匹配一个或多个“单词”字符的任何序列。 (有关精确定义,请参阅official documentation)
例如:
import re
re.findall('\w+', myString)
=> ['command', 'name', 'two', 'parent', 'one']
要处理参数中可能出现的任何其他特殊字符,您可能需要使用以下内容:
[^\s/-]\S*
这将匹配任何不是空白字符,连字符或正斜杠的字符,后跟零个或多个非空白字符。
例如:
myString = "//command -name two -parent one-one foo@example.com"
re.findall('[^\s/-]\S*', myString)
=> ['command', 'name', 'two', 'parent', 'one-one', 'foo@example.com']
答案 1 :(得分:0)
正则表达式是一种可能的解决方案,但我可能会选择以下方法之一:
答案 2 :(得分:0)
import shlex
myString = "//command -name two -parent one [...]"
shlex.split(myString)
['//command', '-name', 'two', '-parent', 'one', '[...]']
答案 3 :(得分:0)
In [11]: myString = "//command -name two -parent one -foo bar"
In [12]: [re.sub(u'^[-/]*', '', x) for x in myString.split()]
Out[12]: ['command', 'name', 'two', 'parent', 'one', 'foo', 'bar']
import re
是必需的。