我需要在每个句子开头的短划线之前删除所有单词。有些句子在破折号之前没有单词,而长句子中的破折号需要保留。这是一个例子:
如何更改这些字符串:
巴黎 - 总统尼古拉·萨科齐(Nicolas Sarkozy)从后面跑来跑去 改选...GAZA CITY--加沙与以色列之间的跨境战斗......
哥伦比亚卡鲁鲁 - 突然之间,亚马逊的无尽绿色 森林...
地震和海啸摧毁日本东北部一年后 海岸...
进入这些字符串:
总统尼古拉·萨科齐(Nicolas Sarkozy)从后面跑来跑去 改选...
加沙与以色列之间的跨界战斗......
突然之间,亚马逊的无尽绿色 森林...
地震和海啸摧毁日本东北部一年后 海岸...
如何使用javascript(或php,如果javascript不允许)来实现这一点?
答案 0 :(得分:5)
这是一个非常简单的正则表达式问题,但是geez,它并不像所有其他答案所假设的那样简单。几点:
正则表达式是正确的选择 - split
和substr
答案不会处理前导空格,并且无法区分日期行与短划线的开头句子,以及文本内容中间的短划线。您使用的任何选项都应该能够处理以下内容:"President Nicolas Sarkozy — running from behind for reelection — came to Paris today..."
以及您建议的选项。
自动识别上面的测试句子没有日期行是很棘手的。到目前为止,几乎所有答案都使用单一描述:any number of arbitrary characters, followed by a dash
。这对于像上面那样的测试句来说是不够的。
您可以通过添加更多规则(例如fewer than X characters, located at the beginning of the string, followed by a dash, optionally followed by an arbitrary number of spaces, followed by a capital letter
)来获得更好的结果。即使这对"President Sarkozy — Carla Bruni's husband..."
也无法正常工作,但你必须假设这种边缘情况很少被忽视。
所有这些都为您提供了这样的功能:
function removeDateline(str) {
return str.replace(/^[^—]{3,75}—\s*(?=[A-Z])/, "");
}
打破它:
^
- 必须出现在字符串的开头。[^—]{3,75}
- 除了破折号之外的3到75个字符\s*
- 可选空格用法:
var s = "PARIS — President Nicolas Sarkozy, running from behind for reelection...";
removeDateline(s); // "President Nicolas Sarkozy — running from behind for reelection..."
s = "PARIS — President Nicolas Sarkozy — running from behind for reelection...";
removeDateline(s); // "President Nicolas Sarkozy — running from behind for reelection..."
s = "CARURU, Colombia — Quite suddenly, the endless green of Amazonian forest...";
removeDateline(s); // "Quite suddenly, the endless green of Amazonian forest..."
答案 1 :(得分:0)
如果每个句子可以与其他句子分开,则可以使用正则表达式。像这个例子:
var s = "PARIS — President Nicolas Sarkozy, running from behind for reelection..."
function removeWord(str)
{
return str.replace(/^[^—]+—[\s]*/, "");
}
alert(removeWord(s));
答案 2 :(得分:0)
PHP
$x = "PARIS — President Nicolas Sarkozy, running from behind for reelection...";
$var = substr($x, strpos($x, "—"));
答案 3 :(得分:0)
在最基本的例子中:
var str = "PARIS - President Nicolas Sarkozy, running from behind for reelection.";
alert(str.split('-')[1]); // outputs: President Nicolas Sarkozy, running from behind for reelection.
根据您的实际文档结构,可以通过循环内容来加速此类操作。