这是一种找到类似的正则表达式格式的方法吗?
我可能有一个字符串或者可能是一个像
这样的行列表 Human have hands/fingers/feet and so on
如果空格不包含斜杠,我想在斜杠Human have hands/ fingers/ feet and so on
但是,如果空格包含在字符串后面,我不想添加额外的空间。只想在字符串的其余部分添加空格而没有斜杠后面的空格。
例如hands/fingers/ feet
到hands/ fingers/ feet
答案 0 :(得分:1)
下面的代码肯定可以正常工作(离线测试):
<?php
$string = "hands/fingers/feet";
$spaceArr = explode("/",$string);
$modify_string = '';
foreach($spaceArr as $val){
$modify_string .= $val."/ ";
}
echo $modify_string;
// Output is hands/ fingers/ feet
?>
您可以在手/手指/脚中添加任何空间,但输出将始终像手/手指/脚
答案 1 :(得分:1)
是的,当然还有RegEx这个
$count = null;
$returnValue = preg_replace('/\\/([^ ])/', '/ $1', 'hands/fingers/ feet', -1, $count);
解释
/\/([^ ])/
这个正则表达式只匹配/
而没有空格,并替换为'/ $ 1'。这里$ 1是/
答案 2 :(得分:1)
是的,使用负向前看是最好的方法。
$str = preg_replace('/\/(?!\s)/', '/ ', $str);
你可以看到[这里] [1]
这使用了负向前看。所以它基本上说:
仅当/
后面没有空格时才匹配。另外展望不要消耗匹配中的任何字符,因此如果没有预见就不需要替换字母。
特别感谢@ShalithaSuranga发布我原本想到的相同答案,但在我有机会发布之前,因此迫使我做出一些额外的努力来使用前瞻。
我通常不使用它们,因为它们比常规匹配模式更容易混淆。
那就是说,任何一个可能会更快,然后爆炸或其他更冗长的方法。然而,在这种情况下,速度可能不是一个问题,我会说对你来说最有意义,并且你更容易阅读和理解后者。
可读性总是#1,然后是功能,然后是性能。
如果你想要一个简短的非regx答案,你也可以使用它
$str = "hands/fingers/feet";
echo implode("/ ", array_map('trim', explode("/", $str)));
见here
对于这个,array_map
将函数回调作为第一个参数(可以是一个字符串)并应用它或将其映射到数组中的每个项目。在这种情况下,我们希望trim
从字符串的两边删除空格。然后我们将它重新组合在一起。这样就像爆炸one/ two
[
'one',
' two'
]
将修剪空白,然后我们用'/ '
和所有设置将其内爆。
答案 3 :(得分:1)
您可以使用此正则表达式执行此操作:
echo preg_replace('@\/(\s)?@', '/ ', "Human have hands/fingers/ feet and so on");
演示:https://regex101.com/r/c67Mh9/1/
PHP示例:
d = {'year': [2001, 2002], 'wsp': [0.51, 0.42]}
df = pd.DataFrame(data=d)
d2 = {'year': [2001, 2002], 'age': [50, 60]}
df2 = pd.DataFrame(data=d2)
join = pd.merge(df, df2, on='year')
答案 4 :(得分:0)
使用explode()
或尝试下面的str_replace()
示例
请尝试str_replace()
:
<php
$words = 'hands/fingers/ feet'; /** Your example words **/
$words = str_replace('/', '/ ', $words); /** Replace any slash with a slash AND a space **/
$words = str_replace('/ ', '/ ', $words); /** Replace slash with 2 spaces with slash with 1 space as this is what you need **/
echo $words; /** Output: hands/ fingers/ feet **/
?>
我希望这会带你走向正确的方向。