2013-12-22 3 views
-1

На Python, предположим, что у меня есть строку, которые представляют собой образец строк, как и что:Regex - Получение конкретных слов в шаблоне

myString = "//command -name two -parent one [...]" 

Где [...] означает последовательность -Arg и значение.


Как я могу извлечь конкретный контент из строки? Например, я хотел бы, чтобы извлечь слова:

wordsExtracted = ['command', 'name', 'two', 'parent', 'one', ... ] 

Где ... средства ... вы знаете, что это означает!


Я думаю, что лучший способ получить, что использует RegEx, верно?
Другой способ заключается в сплите с использованием как «//», так и «-», но я думаю, что это не является более гибким способом сделать это.

Итак ... Как я могу делать то, что хочу?

+0

Возможно, вы имеете в виду нечто вроде '(?: Ваше слово) | (?: Your_other_word) | (?: Your_other_word)' или таким образом. –

+0

Возможно, но я не хочу ограничивать количество слов. – Richard

+0

Разве вы не можете просто 'myString.split()'? –

ответ

1

Я уверен, что есть и другие решения, но если вы хотите для использования регулярных выражений, такой шаблон будет работать

\w+ 

Это будет соответствовать любой последовательности одного или нескольких символов слова. (См official documentation для точного определения)

Например:

import re 
re.findall('\w+', myString) 
=> ['command', 'name', 'two', 'parent', 'one'] 

Чтобы обрабатывать любые другие специальные символы, которые могут возникнуть в пределах параметров, вы можете захотеть использовать что-то вроде этого:

[^\s/-]\S* 

Это будет соответствовать любому символу, который не является символом пробела, дефис или косой чертой, за которым следуют ноль или более символов без пробелов.

Например:

myString = "//command -name two -parent one-one [email protected]" 
re.findall('[^\s/-]\S*', myString) 
=> ['command', 'name', 'two', 'parent', 'one-one', '[email protected]'] 
+0

не удается, если значение аргумента содержит, например, '-'. '-opt I-am-kent' – Kent

+0

@Kent Это справедливый момент, хотя я не уверен, что это требование. Тем не менее, я добавил, что в качестве альтернативы –

+1

вы исправили этот случай '-'. возможно, я не уточнил в своем последнем комментарии. '\ w' отлично работает с данным примером. однако он не сработает, если строка значений содержит '\ W', well' \ s' в этом случае не имеет смысла, но мы все еще '-,:,. (dot) ...' поэтому я не конечно, если '\ w' подходит для этой проблемы. – Kent

0
import shlex 
myString = "//command -name two -parent one [...]" 
shlex.split(myString) 
['//command', '-name', 'two', '-parent', 'one', '[...]'] 
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 необходим.

Смежные вопросы