我需要一个正则表达式来替换任何单词中间的连字符,但不要触及前导或尾随单词或独立单词。这是内Regex.Replace在.NET中使用()正则表达式替换字符中间的连字符
我已经试过以下
\w[-]\w
但也抓住了连字符的字符两侧。举个例子,我需要的是以下字符串
- 测试测试测试 - 测试
如果替换字符是!,成为
- 测试测试!测试 - 测试
任何帮助很大收到
感谢
詹姆斯
我需要一个正则表达式来替换任何单词中间的连字符,但不要触及前导或尾随单词或独立单词。这是内Regex.Replace在.NET中使用()正则表达式替换字符中间的连字符
我已经试过以下
\w[-]\w
但也抓住了连字符的字符两侧。举个例子,我需要的是以下字符串
- 测试测试测试 - 测试
如果替换字符是!,成为
- 测试测试!测试 - 测试
任何帮助很大收到
感谢
詹姆斯
如果我理解正确的问题,它是关于匹配连字符,而不是旁边的文字。下面是一个Perl的正则表达式一样:
(?<=\w)-(?=\w)
这是一个积极的向后断言,一个连字符和一个积极的预测先行断言。
用Perl(你没有提到语言)工作的:
/\w-\w/
例如,尝试这一个班轮:
mine:~> perl -e '$x="abc-def"; $x=~/\w(-)\w/; print "$x $1\n";'
abc-def -
或者这一个:
mine:~> perl -e '$x="abc-def"; print "$x\n";$x=~s/(\w)-(\w)/$1 $2/; print "$x\n";'
abc-def
abc def
下面是一个例子(来自评论)替换所有的相关' - '在字符串中:
mine:~> perl -e '$x="-this i-s a te-st-"; print "$x\n";$x=~s/(\w)-(\w)/$1$2/g; print "$x\n";'
-this i-s a te-st-
-this is a test-
请注意,在这个例子中,我只是删除了破折号,而在前面的例子中,我用空格替换了它。我还将g
修饰符添加到替换命令以使其替换“ - ”的所有实例。
这个表达式用准确1连字符的所有单词匹配它:
[a-zA-Z]+[-][a-zA-Z]+
这相当于:
\w+[-]\w+
你表达的连字符前面的字母,连字符和后面的字母相匹配连字符。它会查找所需的所有连字符,即使是带有多个连字符的文字。你想如何替换连字符?你能对你的目标更具体吗?
echo "- foo-bar - bar-foo -" | sed -e 's/\([[:alnum:]]\)-\([[:alnum:]]\)/\1\2/g'
如果您使用sed,您可能使用了错误的字符类来匹配字母数字表达式。
请您进一步详细说明“似乎不正确匹配”?举几个例子。 – Moshe 2009-06-18 09:32:00
你也应该说你正在使用什么技术/框架。并非所有的正则表达式引擎都是相同的。 – AakashM 2009-06-18 10:42:53
对不起,我不是很清楚。编辑了这个问题更有意义 – James 2009-06-18 11:06:57