我想匹配由逗号分隔的三个字符的字母序列(只允许字母'a','b','c')(最后一个组不以逗号结尾).
例子:
abc,bca,cbb
ccc,abc,aab,baa
bcb
Run Code Online (Sandbox Code Playgroud)
我写了以下正则表达式:
re.match('([abc][abc][abc],)+', "abc,defx,df")
Run Code Online (Sandbox Code Playgroud)
但它无法正常工作,因为上面的示例:
>>> print bool(re.match('([abc][abc][abc],)+', "abc,defx,df")) # defx in second group
True
>>> print bool(re.match('([abc][abc][abc],)+', "axc,defx,df")) # 'x' in first group
False
Run Code Online (Sandbox Code Playgroud)
似乎只检查第一组三个字母,但它忽略了其余的.如何正确编写这个正则表达式?
我试图使用python 2.7中的正则表达式从明文体中提取完整句子的列表.为了我的目的,将所有可以解释为完整句子的内容放在列表中并不重要,但列表中的所有内容都需要是一个完整的句子.以下是将说明问题的代码:
import re
text = "Hello World! This is your captain speaking."
sentences = re.findall("[A-Z]\w+(\s+\w+[,;:-]?)*[.!?]", text)
print sentences
Run Code Online (Sandbox Code Playgroud)
根据这个正则表达式测试器,理论上我应该得到这样的列表:
>>> ["Hello World!", "This is your captain speaking."]
Run Code Online (Sandbox Code Playgroud)
但我实际得到的输出是这样的:
>>> [' World', ' speaking']
Run Code Online (Sandbox Code Playgroud)
该文件指出的findall搜索从左至右和*和+运营商都贪婪地处理.感谢帮助.
https://regex101.com/r/sB9wW6/1
(?:(?<=\s)|^)@(\S+) <-正向后看的问题
在prod:上像这样工作(?:\s|^)@(\S+),但是我需要一个正确的开始索引(没有空间)。
在JS中:
var regex = new RegExp(/(?:(?<=\s)|^)@(\S+)/g);
Run Code Online (Sandbox Code Playgroud)
解析正则表达式时出错:无效的正则表达式:/(?:(?<= \ s)| ^)@(\ S +)/
我究竟做错了什么?
更新
好吧,在JS中没有后顾之忧
但是无论如何,我需要一个正则表达式来获取比赛的正确开始和结束索引。没有领先的空间。
我有一些句子像
如何提取单词“room|rooms”之前的唯一数字。寻找必须是 4 和 2/3 的答案。我试过的代码,
room_found =re.findall(r"\d\s?\/?\d?\s?(?=(rooms)|(room))", str_arg)
print(room_found)
Run Code Online (Sandbox Code Playgroud)
这将打印 [('', '4 room')] 和 [('', '2/3 room')],但我希望只打印 4 和 2/3。
我试图匹配两个字符串变量,并希望捕获多个匹配.re.findall似乎是这项任务的明显选择,但它似乎并没有像我期望的那样工作.以下是一个例子:
a = 'a(pp)?le'
b = 'ale, apple, apol'
match = re.findall(a,b)
match
['','pp']
Run Code Online (Sandbox Code Playgroud)
但是,当我将相同的变量应用于re.search时,它会识别字符串中的嵌入式正则表达式,并获取第一个匹配项:
match = re.search(a,b)
match.group()
'ale'
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么re.findall不能在这个实例中工作?我希望如下:
match = re.findall(a,b)
match
['ale','apple']
Run Code Online (Sandbox Code Playgroud)
谢谢!
>>> reg = re.compile(r'^\d{1,3}(,\d{3})*$')
>>> str = '42'
>>> reg.search(str).group()
'42'
>>> reg.findall(str)
['']
>>>
Run Code Online (Sandbox Code Playgroud)
python regex为什么reg.findall一无所获,但reg.search在上面的这段代码中工作?