我有一个std :: string,带有这样的文本
name0 0x3f700000 0x160000 1 0
或
name1 0x3f700000 0x760000 0 23
等。
我想知道的是,此行中的最后一个数字是否大于0且前面的数字是1。
我做了这个,但它不起作用,总是返回一个匹配。
std::regex_search(buffer, match, std::regex(std::string("(^|\n)") +
m_name + " [0-9a-fA-Fx]* [0-9a-fA-Fx]* 1 [1-9a-fA-Fx]*"));
你能说出错误在哪里吗?它似乎知道前面的数字是1,但最后一个数字似乎是错误的。
答案 0 :(得分:1)
您可以使用
[1-9][0-9]*$
检查数字是否大于0
它的作用是什么?
[1-9]
将1
与9
匹配。
[0-9]*
匹配零个或多个数字
$
匹配字符串的结尾。
完整的正则表达式可以
name0 [0-9a-fA-Fx]* [0-9a-fA-Fx]* 1 [1-9][0-9]*$
答案 1 :(得分:1)
您可以使用此正则表达式
from kivy.app import App
from kivy.uix.screenmanager import Screen
from kivy.lang import Builder
gui = '''
LoginScreen:
GridLayout:
cols: 2
Label:
text: 'Subject'
Label:
Label:
text: '1'
SingleLineTextInput:
Label:
text: '2'
SingleLineTextInput:
Label:
text: '3'
SingleLineTextInput:
Label:
text: '4'
SingleLineTextInput:
GreenButton:
text: 'Exit'
on_press: app.stop()
GreenButton:
text: 'Run'
<SingleLineTextInput@TextInput>:
multiline: False
<GreenButton@Button>:
background_color: 0, 1, 0, 1
size_hint_y: None
height: self.parent.height * 0.111
'''
class LoginScreen(Screen):
pass
class SimpleKivy(App):
def build(self):
return Builder.load_string(gui)
if __name__ == '__main__':
SimpleKivy().run()
<强> Regex Demo 强>
或更具体地说
1\s+[1-9]\d*$
<强> Regex Demo 强>