我有一些字符串,在某些特定索引处,我想检查下一个字符是否被一个或多个空格包围的数字。
例如
这是一个字符串
'一些数据\ n 8 \ n更多数据'
让我说我正在迭代字符串并且当前站在索引8处,并且在那个位置我想知道如果下一个字符是数字而且只有数字忽略前后的所有空格。
因此,对于上述特定情况,它应该告诉我True
和字符串如下
'一些数据\ n(8 \ n更多数据'
它应该告诉我False
我尝试了下面的模式
r'\s*[0-9]+\s*'
但它对我不起作用,可能是我使用不正确。
答案 0 :(得分:1)
试试这个:
(?<=\s)[0-9]+(?=\s)
这个正则表达式使用前瞻和后瞻,只有当它前后的字符是空白字符时才匹配数字。
详细形式:
(?<=\s) # match if whitespace before
[0-9]+ # match digits
(?=\s) # match if whitespace after
答案 1 :(得分:1)
您的原始正则表达式无效,因为“*”表示“零或多个匹配”。相反,你应该使用“+”,这意味着“一个或多个匹配”。见下文:
>>> import re
>>> s = 'some data \n 8 \n more data'
>>> if re.search("\s+[0-9]+\s+", s): print True
...
True
>>> s = 'some data \n 8) \n more data'
>>> if re.search("\s+[0-9]+\s+", s): print True
...
>>> s = 'some data \n 8343 \n more data'
>>> if re.search("\s+[0-9]+\s+", s): print True
...
True
>>>
如果您只想捕获由一个或多个空格包围的单个数字,请删除“[0-9]”前面的“+”,如下所示:
re.search("\s+[0-9]\s+", s)
答案 2 :(得分:-1)
没有正则表达式:
s1 = 'some data \n 8 \n more data'
s2 = 'some data \n (8 \n more data'
testString = lambda x: True if len(x.splitlines()[1].strip()) == 1 else False
print testString(s1)
print testString(s1)
输出:
True
False