我有这个字符串:
"Common Waxbill - Estrilda astrild"
如何为连字符前后的单词写2个单独的正则表达式?我想要的输出是:
"Common Waxbill"
和
"Estrilda astrild"
答案 0 :(得分:6)
This is quite simple:
.*(?= - ) # matches everything before " - "
(?<= - ).* # matches everything after " - "
答案 1 :(得分:5)
如果你不能使用look-behinds,但是你的字符串总是采用相同的格式并且canout包含的内容超过单个连字符,你可以使用
第一个 ^[^-]*[^ -]
,第二个\w[^-]*$
(如果连字符后的第一个非空格不一定是单词字符,则为[^ -][^-]*$
。
一点解释:
^[^-]*[^ -]
匹配字符串的开头(anchor ^
),后跟任意数量的字符,不是连字符,最后是不是连字符或空格的字符(只是为了排除最后一个空格)匹配)。
[^ -][^-]*$
采用相同的方法,但反过来说,首先匹配一个既不是空格也不是连字符的字符,后跟任意数量的字符,不是连字符,最后是字符串的结尾(anchor { {1}})。 $
基本相同,它使用更严格的\w[^-]*$
代替\w
。这再次用于从匹配中的连字符后排除空格。
答案 2 :(得分:0)
另一种解决方案是在连字符上使用split字符串并删除空白。
答案 3 :(得分:0)
问题的主要挑战是您需要两个单独的项目。这意味着您的过程依赖于另一种语言。 RegEx本身不解析或分隔字符串; 您所使用的语言将进行实际分离。我的答案可以用PHP获得结果,但是其他语言应该具有可比的解决方案。
如果您只想在问题中完成任务,请,如果您使用的是PHP ...
explode("-", $list);
-> $array[]
如果您的列表超过两个项目,这将很有用:
<?php
// Generate our list
$list = "Common Waxbill - Estrilda astrild";
$item_arr = explode("-", $list);
// Iterate each
foreach($item_arr as $item) {
echo $item.'<br>';
}
// See what we have
echo '
<pre>Access array directly:</pre>'.
'<pre>'.$item_arr[0].'x <--notice the trailing space</pre>'.
'<pre>'.$item_arr[1].' <--notice the preceding space</pre>';
...您可以清理每个项目,然后使用trim()
将它们重新分配到新的阵列中。这将获得您的问题所要求的文本(之前或之后没有多余的空格)...
// Create a workable array
$i=0; // Start our array key counter
foreach($item_arr as $item) {
$clean_arr[$i++] = trim($item);
}
// See what we have
echo '
<pre>Access after cleaning:</pre>'.
'<pre>'.$clean_arr[0].'x <--no space</pre>'.
'<pre>'.$clean_arr[1].' <--no space</pre>';
?>
输出:
Common Waxbill
Estrilda astrild
Access array directly:
Common Waxbill x <--notice the trailing space
Estrilda astrild <--notice the preceding space
Access after cleaning:
Common Waxbillx <--no space
Estrilda astrild <--no space
substr(strrpos())
和substr(strpos())
如果您的列表中只有两个项目,这将很有用:
<?php
// Generate our list
$list = "Common Waxbill - Estrilda astrild";
// Start splitting
$first_item = trim(substr($list, strrpos($list, '-') + 1));
$second_item = trim(substr($list, 0, strpos($list, '-')));
// See what we have
echo "<pre>substr():</pre>
<pre>$first_item</pre>
<pre>$second_item</pre>
";
?>
输出:
substr():
Estrilda astrild
Common Waxbill
请注意,strrpos()和strpos()不同,并且语法也不同。
如果您不使用PHP,但是想以某种其他语言来完成这项工作,而不必依赖RegEx,那么了解该语言将很有帮助。
通常,编程语言附带了一些类似的工具来进行此类工作,这就是人们选择他们所使用的语言的原因之一。