Определите, является ли строка на входе одним словом в Python - PullRequest
1 голос
/ 22 февраля 2010

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

Итак, учитывая, что входные данные могут быть полным или относительным путем или одним словом (включая подчеркивания и тире, но не пробелы), мне интересно, как написать функцию, которая определяет, является ли ввод одиночным » Слово "как определено выше.

Например:

  • «Public_345» будет классифицироваться как действительное «слово»
  • "/ home / путь / к / чему-то", очевидно, не будет
  • «Foo bar» также не будет считаться допустимым «словом»

Поскольку строковые методы не подходят, мне интересно, можно ли было бы использовать регулярное выражение. Изначально я придумал что-то вроде этого:

match = re.compile(r"[\w-]+")
word = "abdcde_-4"
if len(re.findall(match, word)) == 1:
    print "Single word"

Однако это действительно ужасно, и я уверен, что это не уловит угловых случаев. Есть ли (намного) лучшие решения там?

Ответы [ 4 ]

5 голосов
/ 22 февраля 2010

Вы можете настроить свое регулярное выражение так, чтобы оно соответствовало всей входной строке, чтобы вам не приходилось считать совпадения. * 1001 Т.е. *

if re.match(r'\A[\w-]+\Z', word):
  print "Single word"

(скомпилируйте регулярное выражение, если вы так склонны)

\A и \Z соответствуют началу и концу входной строки соответственно. Итак, если ваш word содержит в себе другие данные, кроме пути, то вышеуказанный подход не работает.

3 голосов
/ 22 февраля 2010
>>> r="Foo bar".split()
>>> if len(r) != 1: print "not ok"
...
not ok
>>> if "/" in "/home/path/to/something":
...   print "ok"
...
ok
0 голосов
/ 22 февраля 2010

Проверьте модуль os.path. Вы можете использовать os.path.abspath () , чтобы преобразовать данный путь в полный путь (если он находится в той же системе).

Вы можете проверить с помощью следующего фрагмента, есть ли в строке какие-либо пробельные символы.

if (str.split () [- 1] == str) возвращает True

0 голосов
/ 22 февраля 2010

Просто проверьте строку и посмотрите, содержит ли она ' ' (пробел) или '\' (разделитель пути). Если это так, то это не «одно слово».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...