Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在缺少数据的情况下保持ReqEX输出的长度稳定,python2.7_Python_Regex - Fatal编程技术网

如何在缺少数据的情况下保持ReqEX输出的长度稳定,python2.7

如何在缺少数据的情况下保持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

以下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使用此输出


非常感谢大家

您可以使用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正则表达式引擎不支持在堆栈上存储多个捕获组,因此我们必须手动列出捕获前后的捕获组