读书人

C#的repace方法和正则表达式的结合用法

发布时间: 2013-01-25 15:55:29 作者: rapoo

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


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

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

读书人网 >perl python

热点推荐