您好我想在字符串
中的特殊字符前后添加空格冷冻/冷藏/环境(请说明)
我希望结果像
冷冻/冷藏/环境(请说明)
是否有可能在ruby regexp中添加空间?
答案 0 :(得分:8)
不需要使用复杂的正则表达式
您可以使用gsub
"Frozen/Chilled/Ambient (Please state)".gsub(/\W+/) {|w| " #{w} "}
#=> "Frozen / Chilled / Ambient ( Please state ) "
如果要删除重复的空格,可以使用squish
"Frozen/Chilled/Ambient (Please state)".gsub(/\W+/) {|w| " #{w} "}.squish
#=> "Frozen / Chilled / Ambient ( Please state )"
注意:强>
\W
- 匹配任何非单词字符squish
- 删除周围的空格并将多个空格更改为1 修改强>
根据评论,如果还可以使用/[[:punct:]]/
[[:punct:]] => [!"\#$%&'()*+,\-./:;<=>?@\[\\\]^_`{|}~]
答案 1 :(得分:4)
尝试 String#gsub :
> sample = "Frozen/Chilled/Ambient (Please state)"
#=> "Frozen/Chilled/Ambient (Please state)"
> sample.gsub!("/", " / ")
#=> "Frozen / Chilled / Ambient (Please state)"
注意: gsub!
将覆盖变量的值本身
根据您的评论,您希望在每个特殊字符之前和之后添加空格:
> pattern = /[^a-zA-Z0-9|(|)|_|\s\-]/
> sample.gsub(pattern){|match|" #{match} "}
#=> "Frozen / Chilled / Ambient (Please state)"
注意: pattern
涵盖所有特殊字符
答案 2 :(得分:4)
试试这个:
sample = "Frozen/Chilled/Ambient (Please state)"
sample.gsub(/([^\w\s])/, ' \1 ')
所有内容都不是\w
(\w
是a-z, A-Z, 0-9
而非意外核心_
)或空格\s
。然后gsub
用前后空格替换自己找到的元素。
答案 3 :(得分:4)
这可能是一个快速的解决方案。
angular
.module('myapp', [
'ui.router',
])
.config(['$stateProvider', '$urlRouterProvider',
function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/dashboard/Home');
$stateProvider
.state('dashboard', {
url: '/dashboard',
templateUrl: 'views/dashboard/main.html',
})
.state('home', {
parent:'dashboard',
url: '/Home',
controller: 'MainCtrl',
templateUrl: 'views/pages/blank.html',
}
})
.state('login', {
templateUrl: 'views/pages/login.html',
url: '/login'
})
}
]);
几分钟之后,Cary Swoveland会来评论,&#34;嘿,儿子,有足够的字符串方法来解决这个问题,你的解决方案是非常无效的&#34; - ))
对于这种情况,下面的代码片段使用字符串方法,并匹配除了之外的所有内容 字母数字和空格。
<!doctype html>
<html class="no-js">
<head>
<meta charset="utf-8">
<title></title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width">
<!-- build:css(.tmp) styles/main.css -->
<link rel="stylesheet" href="styles/libs/bootstrap.min.css" />
<link rel="stylesheet" href="styles/main.css">
<link rel="stylesheet" href="styles/sb-admin-2.css">
<link rel="stylesheet" href="styles/timeline.css">
<link rel="stylesheet" href="styles/libs/metisMenu.min.css">
<link rel="stylesheet" href="styles/libs/loading-bar.min.css">
<link rel="stylesheet" href="styles/libs/font-awesome.min.css"
type="text/css">
<!-- endbuild -->
<!-- bower:js -->
<script src="js/libs/jquery.min.js"></script>
<script src="js/libs/bootstrap.min.js"></script>
<script src="js/libs/metisMenu.min.js"></script>
<script src="js/libs/angular.min.js"></script>
<script src="js/libs/angular-ui-router.min.js"></script>
<script src="js/libs/ocLazyLoad.min.js"></script>
<script src="js/libs/loading-bar.min.js"></script>
<script src="js/libs/ui-bootstrap-tpls.min.js"></script>
<!-- endbower -->
<!-- build:js({.tmp,app}) scripts/scripts.js -->
<script src="scripts/app.js"></script>
<!-- endbuild -->
</head>
<body>
<div ng-app="ApsilonApp">
<div ui-view></div>
</div>
</body>
</html>
没有块。
"Frozen/Chilled/Ambient (Please state)".split("/").join(" / ")
# => "Frozen / Chilled / Ambient (Please state)"