为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式数据值 Javascript 空白

正则表达式数据值 Javascript 空白

qq_笑_17 2022-10-08 17:51:46
我正在尝试为我收到的数据添加正确的空格。目前它显示这样没有开始ReadyforPPPD审查这是我正在使用的代码.replace(/([A-Z])/g, '$1')“NotStarted”显示正确的“Not Started”,但“ReadyforPPPDReview”显示“Readyfor PPPD Review”,它应该看起来像这样“Ready for PPPD Review”使用一个正则表达式或函数来处理这两种情况的最佳方法是什么?
查看完整描述

1 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

你需要一个 NLP 引擎来正确处理这个问题。以下是两种使用简单正则表达式的方法,它们都有局限性:


1.使用停用词列表


我们盲目地在停用词前后添加空格:


var str = 'NotStarted, ReadyforPPPDReview';

var wordList = 'and, for, in, on, not, review, the'; // stop words


var wordListRe = new RegExp('(' + wordList.replace(/, */g, '|') + ')', 'gi');

var result1 = str

  .replace(wordListRe, ' $1 ') // add space before and after stop words

  .replace(/([a-z])([A-Z])/g, '$1 $2') // add space between lower case and upper case chars

  .replace(/  +/g, ' ') // remove excessive spaces

  .trim(); // remove spaces at start and end

console.log('str:     ' + str);

console.log('result1: ' + result1);


正如您可以想象的那样,停用词方法有一些严重的局限性。例如,单词formula input会导致for mula in put.


1.使用映射表


映射表列出了需要分隔的单词(不涉及药物),如以下代码片段所示:


var str = 'NotStarted, ReadyforPPPDReview';

var spaceWordMap = {

  NotStarted: 'Not Started',

  Readyfor:   'Ready for',

  PPPDReview: 'PPPD Review'

  // add more as needed

};


var spaceWordMapRe = new RegExp('(' + Object.keys(spaceWordMap).join('|') + ')', 'gi');

var result2 = str

  .replace(spaceWordMapRe, function(m, p1) { // m: matched snippet, p1: first group

    return spaceWordMap[p1] // replace key in spaceWordMap with its value

  })

  .replace(/([a-z])([A-Z])/g, '$1 $2') // add space between lower case and upper case chars

  .replace(/  +/g, ' ') // remove excessive spaces

  .trim(); // remove spaces at start and end

console.log('str:     ' + str);

console.log('result2: ' + result2);

如果您有一个确定的单词列表作为输入,则此方法适用。


查看完整回答
反对 回复 2022-10-08
  • 1 回答
  • 0 关注
  • 124 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号