如何在缺少数据的情况下保持ReqEX输出的长度稳定,python2.7
以下regExp将匹配前后的3个单词(如果存在)如何在缺少数据的情况下保持ReqEX输出的长度稳定,python2.7,python,regex,Python,Regex,以下regExp将匹配前后的3个单词(如果存在) ((?:\w+\s+){0,3}My_WORD_HERE(?:\s+\w+){0,3}) 输出如下: word1 word2 word3 My_WORD_HERE word1 word2 word3 或 word1 word2我的WORD\u这里的word1导致属性为空 我们如何用诸如“?”或任何符号之类的值来填充缺少的单词 输出是这样的 word1-word2?我的单词这里的单词1 我将为Weka ML使用此输出 非常感谢大家您可以使用la
((?:\w+\s+){0,3}My_WORD_HERE(?:\s+\w+){0,3})
输出如下:
word1 word2 word3 My_WORD_HERE word1 word2 word3
或
word1 word2我的WORD\u这里的word1
导致属性为空
我们如何用诸如“?”或任何符号之类的值来填充缺少的单词
输出是这样的
word1-word2?我的单词这里的单词1代码>
我将为Weka ML使用此输出
非常感谢大家您可以使用lambda执行更换:
import re
s = 'word1 word2 My_WORD_HERE word1'
word = 'My_WORD_HERE'
wnb = 3
pat = r'((?:\w+\s+){{0,{0}}}){1}((?:\s+\w+){{0,{0}}})'.format(wnb, word)
res = re.sub(pat, lambda m:
m.group(1) +
'? '*(wnb-len(m.group(1).split())) +
word + m.group(2) +
' ?'*(wnb-len(m.group(2).split())), s)
不是纯粹的正则表达式替换解决方案,但应该做到:
import re
def replaceMissingWords(text, word, placeholder):
match = re.match(r'(\w+)?\s*(\w+)?\s*(\w+)?({0})\s*(\w+)?\s*(\w+)?\s*(\w+)?$'.format(word), text)
if match is None:
return text
return ' '.join(list(map(lambda x: x is None and placeholder or x, match.groups())))
print(replaceMissingWords('word1 word2 My_WORD_HERE word1', 'My_WORD_HERE', '?'))
// output: 'word1 word2 ? My_WORD_HERE word1 ? ?'
另外,python正则表达式引擎不支持在堆栈上存储多个捕获组,因此我们必须手动列出捕获前后的捕获组