使用python正则表达式删除功能

时间:2018-02-23 02:27:44

标签: python regex strip

我是Python的初学者,刚刚学习了正则表达式。
我想要做的是使用正则表达式方法制作条带特征(strip()) 以下是我写的代码,

import regex

stripRegex = regex.compile(r"(\s*)((\S*\s*\S)*)(\s*)")
text = '              Hello World This is me Speaking                                    '
check = stripRegex.search(text)
print(check)
print('group 1 :', stripRegex.search(text).group(1))
print('group 2 :', stripRegex.search(text).group(2))
print('group 3 :', stripRegex.search(text).group(3))
print('group 4 :', stripRegex.search(text).group(4))

结果是,

第1组:
第2组:Hello World这是我说话的 第3组:达到峰值 第4组:

在这里,我想知道两件事 1)组3如何返回'峰值'? 2)python是否识别'('按顺序并分配首先出现的数字?
所以在这段代码中,(\ s *)((\ S * \ s * \ S))(\ s
第一个(\ s *) - 是第一组 ((\ S * \ s * \ S)) - 第二个,
(\ S
\ s * \ S) - 第三,
第二个(\ s *) - 第四个。

AM我是对的?

2 个答案:

答案 0 :(得分:1)

你是对的。 \ S * \ s * \ S匹配:

\S* - at least 0 non-whitespace
\s* - at least 0 whitespace
\S  - one non-whitespace

第3组(\ S * \ s * \ S)重复进给第2组((\ S * \ s * \ S)*),因此第3组将包含它送给组的最后一个匹配2:0或更多非空格的最后一个可能的匹配,后跟0或更多的空格,后跟一个非空格是“#”。这可以通过它的第一场比赛来解释:

'Hello T'
\S* matches 'Hello'
\s* matches ' '
\S  matches 'T'

如果你重复这个,你将从每个单词的前面加上第一个字母:

'his i'
\S* matches 'his'
\s* matches ' '
\S  matches 'i'

等等,直到......

最终的比赛然后省略了最后一个单词的第一个字母,不需要任何空格,并且必须以一个非空格结束:

'tring'
\S* matches 'trin'
\s* matches ''      (at least 0 whitespace, so zero)
\S  matches 'g'

答案 1 :(得分:1)

Q2:你是对的。从左到右,第一个(是第1组的开头,第二个(是第2组的开头,等等。

Q1:由于之前的*,第3组重复匹配。它的最终值将是最终匹配的值。第3组的匹配是:

"Hello W" where \S*="Hello"   \s*=" "   \S="W"
"orld T"  where \S*="orld"    \s*=" "   \S="T" 
"his i"   where \S*="his"     \s*=" "   \S="i"
"s m"     where \S*="s"       \s*=" "   \S="m"
"e S"     where \S*="e"       \s*=" "   \S="S"
"peaking" where \S*="peakin"  \s*=""    \S="g"

这是理解你的正则表达式的绝佳工具:https://regex101.com/r/MmYOPT/1(虽然这对重复匹配没有多大帮助)。