1

我有一些字符串,在某个特定的索引处,我想检查下一个字符是否是由一个或多个空格包围的数字。

例如

这是一个字符串

'一些数据\n 8 \n更多数据'

假设我正在迭代字符串并且当前站在索引 8 处,并且在那个位置我想知道下一个字符是否是数字并且只有数字忽略之前和之后的所有空格。

所以,对于上述特殊情况,它应该告诉我True,对于下面的字符串

'一些数据\n(8个\n更多数据'

它应该告诉我False

我尝试了下面的模式

r'\s*[0-9]+\s*'

但它对我不起作用,可能是我使用不正确。

4

3 回答 3

1

尝试这个:

(?<=\s)[0-9]+(?=\s)

此正则表达式使用前瞻和后瞻,以便仅当它之前和之后的字符是空白字符时才匹配数字。

详细形式:

(?<=\s) # match if whitespace before
[0-9]+  # match digits
(?=\s)  # match if whitespace after
于 2013-07-27T22:38:58.387 回答
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)
于 2013-07-27T22:42:51.480 回答
-1

Without regex:

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)

Output:

True
False
于 2013-07-27T22:16:47.377 回答