首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

C#的repace方法和正则表达式的结合用法,该如何处理

2013-01-25 
C#的repace方法和正则表达式的结合用法正则表达式在C#中的用法:(我用C#的repace方法处理)三种情况举例ABOu

C#的repace方法和正则表达式的结合用法
正则表达式在C#中的用法:(我用C#的repace方法处理)
三种情况举例
A                                   B      
Our W a y to home    our way to home
O u r way to home     our way to home
our way to h o m e     our way to home

要用正确的B来代替A,如何用正则表达式来表示A的三种情况和B??
(A1:句中有2个以上字母以空格间隔出现)
(A2:句首有2个以上字母以空格间隔出现)
(A3:句尾有2个以上字母以空格间隔出现)
急啊 !!

[解决办法]
这挺难的,假如这个单词左边有个单词为I,或者a,而且这个单词和前面这个单词合起来,然后去掉尾字母,又是一个正确的单词,恐怕不是正则表达式能搞定的了。

假设不考虑“左边或右边有个单词为I,或者a”这种情况,我只想到一个能够查找,但不能替换的方法,为:
(^
[解决办法]
 )(([a-zA-Z]) ){2,}([a-zA-Z])( 
[解决办法]
$)
可不可以先用上面的正则表达式查找到,对查找到的内容,首尾有可能的作为单词分隔符的空格先不管(不是删除,是不处理)(即不管查找到的内容的首尾各一字符),然后将它中间的所有空格删除?
[解决办法]
此处假定,每个被分开的单词,其本身所包含的字母的个数,都超过1,那么可以用下面的正则表达式去匹配
那么可以用下面的代码:

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
Q:
http://bbs.csdn.net/topics/390266321

A: by Crifan
"""

import re;

testStrList = [
    "Our W a y to home",#our way to home
    "O u r way to home",#our way to home
    "our way to h o m e",#our way to home
    "our way T O home",#our way to home
];

for eachTestStr in testStrList:
    #此处假定,每个被分开的单词,其本身所包含的字母的个数,都超过1,那么可以用下面的正则表达式去匹配
    seperatedWordP = re.compile('(?P<seperatedWord>((?<!\w)\w(\s
[解决办法]
(?P<foundEnd>$)))+)');
    def processSeperatedWord(match):
        matchedSeperatedWord = match.group(0);
        foundEnd = match.group("foundEnd");
        #print "matchedSeperatedWord=",matchedSeperatedWord;
        removedSpace = re.sub("\s", "", matchedSeperatedWord);
        #print "removedSpace=",removedSpace;
        processedWord = "";
        if(foundEnd != None):
            #print "foundEnd=",foundEnd;
            processedWord = removedSpace;
        else:
            processedWord = removedSpace + " ";
        return processedWord;
    processedWholeStr = seperatedWordP.sub(processSeperatedWord, eachTestStr, re.I);


    processedWholeStr = processedWholeStr.lower();
    print "eachTestStr=%s,\t\tprocessedWholeStr=%s"%(eachTestStr, processedWholeStr);



输出的结果:
eachTestStr=Our W a y to home,          processedWholeStr=our way to home
eachTestStr=O u r way to home,          processedWholeStr=our way to home
eachTestStr=our way to h o m e,         processedWholeStr=our way to home
eachTestStr=our way T O home,           processedWholeStr=our way to home


如果不符合上述前提,那么则必须另外添加一个英语单词表的字典,用于检测合并出来的单词,是否是存在的,如果不存在,就丢弃。
这样最终所得到的方案,应该基本满足你的需求了。

如果本身所有的单词都符合前面假设,那么本身此处的代码,无需改动,即可满足你的需求了。

热点排行