如何检查两个连续的单词是否具有相同的正则表达式模式

时间:2013-05-10 11:51:02

标签: python regex

我已经尝试了几个小时,但我无法达到目标。

这是字符串:'Hello world, By The Way stackoverflow is cool place'。 我正在寻找的是匹配两个具有相同Regex模式的连续单词。

例如,我想替换连续的单词,并以字母"xx"的大写字母开头。

所以当我将它应用到我的字符串时,结果应为:

Hello world,xx xx xx stackoverflow is cool place

这是我的代码:

myString='Hello world,By The Way stackoverflow is cool place'
re.sub(r"[A-Z]\w+","xx",myString)

但我得到的是: 'xx world,xx xx xx stackoverflow is cool place'

2 个答案:

答案 0 :(得分:1)

使用regex模块:

>>> import regex
>>> text = 'Hello world,By The Way stackoverflow is cool place'
>>> regex.sub(r'\b[A-Z]\w+(?=\s+[A-Z]\w+)|(?<=\b[A-Z]\w+\s+)[A-Z]\w+', 'xx', text)
'Hello world,xx xx xx stackoverflow is cool place'

答案 1 :(得分:0)

您可以这样做,具有以下导入/分配

import re,string

lowercase = string.ascii_lowercase
uppercase = string.ascii_uppercase
punctuation = string.punctuation
digits = string.digits
specials = r'.^+*$\[]|()'

然后有一个函数创建由sentance的单词/片段表示的模式

def getPat(text):
    pattern = r""
    for c in text:
        if c in uppercase:
            pattern += '[A-Z]'
        elif c in lowercase:
            pattern += '[a-z]'
        elif c in digits:
            pattern += '\d'
        else:
            if c in specials:
                pattern += '\%s' % c
            else:
                pattern += c
    return pattern

然后你可以翻看单词并检查他们的模式是否匹配

sentance = 'Hello world, By Hi nI The Way stackoverflow is cool place'.split()
for word,wordNext in zip(sentance,sentance[1:]):
    if getPat(word) == getPat(wordNext):
        print("{0} = {1}".format(word,wordNext))

会产生

>>> 
By = Hi
The = Way

您可以通过调整循环来进行替换:

res = ""
for word,wordNext in zip(sentance,sentance[1:]):
    if getPat(word) == getPat(wordNext):
        print("{0} = {1}".format(word,wordNext))
        res += " xx"*2
    else:
        res += " %s" % word
print(res)

会给:

 Hello world, xx xx Hi nI xx xx Way stackoverflow is cool