import re
x=" tex1 text2 taxw ello how are 123 "
y=x.split()
sear=re.compile(r'\s*\w*[x]\w*\s*')
a=sear.findall(x)
print(a)
我的输出为
[' tex1 ', 'text2 ', 'taxw ']
其中只有tex1
符合上述条件,而'text2 ', 'taxw '
在开头没有空格。
我试图找出一个找到
答案 0 :(得分:1)
请注意,'tex1 '
,' text2 '
和' taxw '
重叠,text2
和taxw
之前的空格在前一次迭代期间由模式匹配和使用
您可以做的是将最终的\s*
放入捕获组,并将其与整个匹配连接起来:
import re
x=" tex1 text2 taxw ello how are 123 "
y=x.split()
sear=re.compile(r'\s*\b\w*x\w*\b(?=(\s*))')
a=["{}{}".format(x.group(),x.group(1)) for x in sear.finditer(x)]
print(a) # => [' tex1 ', ' text2 ', ' taxw ']
请参阅Python demo
(?=(\s*))
是一个非消费的正向前瞻,它不会移动正则表达式索引,因此,它可以匹配前面的空格,然后再匹配。
答案 1 :(得分:0)
我认为像这样的正则表达式会有所帮助:
\s+\w*x\w*(?=\s+|$)
然后在a
;)之后打印一个空格。
\s+ at least one space before characters
\w* 0 or more characters
x x character
\w* 0 or more characters
(?=\s+|$) followed by at least one space or end of line
答案 2 :(得分:0)
要匹配重叠的字符串,您可以使用包含将模式放在前瞻中的解决方法来使用捕获组:
re.findall(r'(?=(\s*\b\w*x\w*\s*))\s*.', x)
定义捕获组后,re.findall
仅返回结果列表中捕获组的内容。
\s*.
(也可以写成\s*\w
)仅用于消费开头的最终空格+来自单词的字符。这样,通过使用单词边界,模式只能找到完整的单词而且只能找到一次。 (左边的空格数不同,不是同一个词)