如果多个单词不包含数字

时间:2017-02-03 12:17:42

标签: python regex

这个问题可能很愚蠢,我是正则表达式的新手,我有点卡住了。

我有多个字符串,其中包含数字和单词。我想只匹配单词,如果它们不包含整数。

12 This Is A Test 9eifEf 12

由此,我想匹配This Is A Test

11 Stack 21deEh 12

由此,我想匹配Stack

使用RegExr,我想出了表达式.[a-z],它看起来像是有效的,但它一次最多匹配2个字母,而不是空格。

对不起代码请求。我不需要比模式更多的东西。我感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

只需使用:

\b[A-Za-z]+\b

下面:

  • \b是一个单词边界,因此我们不匹配以数字开头的单词;
  • [A-Za-z]是一个包含所有大写和小写字母的字符组;和
  • +表示" 一个或多个"。

如果你想返回字符串,你可以 - 正如@James所说 - 使用' '.join(..)

$ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> rgx=re.compile(r'\b[A-Za-z]+\b')
>>> text='12 This Is A Test 9eifEf 12'
>>> rgx.findall(text)
['This', 'Is', 'A', 'Test']
>>> ' '.join(rgx.findall(text))
'This Is A Test'

答案 1 :(得分:2)

无需使用正则表达式,使用str.isalpha过滤掉分割后的单词中的数字:

s = "12 This Is A Test 9eifEf 12"

print(" ".join([x for x in s.split() if x.isalpha()]))

给出:

This Is A Test
但是,这不会保留多个空格。要做到这一点,只需:

print(" ".join([x for x in s.split(" ") if not x or x.isalpha()]))