正则表达式清除在分隔符之前/之后没有文本的文本

时间:2019-03-24 10:43:26

标签: regex

我正在尝试清理一些带有分隔符的文本,该分隔符前后没有分隔符。

“类型”是

3150779 | 3674-4 |Water Supply Plan
3637730 |
 | 10903-155 | Layout 10903 DWG 155 29 M | 
| 10903-155 | | Water Supply |

我知道[^\|]+对此进行了拆分,但是当分隔符之前/之后没有文本时,我想摆脱分隔符。所以正则表达式应该导致

3150779 | 3674-4 | Water Supply Plan
3637730
10903-155 | Layout 10903 DWG 155 29 M
10903-155 | Water Supply

我想将其应用于Google工作表中,其中已清除的文本仅进入一列。

请参见https://regex101.com/r/GzbCEU/1

我也尝试过[\s]+\|\s(.*),这会选择分隔符,但不会清除文本。

---更新--- 当我尝试Pushpesh Kumar Rajwanshi的建议时,我对GSheet毫无价值。 enter image description here

也是同样的问题

enter image description here

2 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式,

^ *(?:\| *)+| *(?:\| *)+$|(\| *){2,}

说明:

共有三个部分,分别处理三种情况。

  • ^ *(?:\| *)+-这个替换开头的所有|,中间可以有空格
  • |-交替
  • *(?:\| *)+$-这个替换了最后所有|,中间可以有空格
  • (\| *){2,}-此替换|的所有两个以上的$1,它们之间可以有间隔,但保留最后的间隔。

然后将其替换为在Google表格中工作的$1

请注意,只有在第三轮替组中匹配|的情况下,才用|进行替换,在替换组中,$('.ui-datepicker-current-day').click();仅保留一个$("#datepicker").trigger("click");

Demo

编辑:显示如何使用正则表达式查找/替换的屏幕截图,

更换前

enter image description here

更换后

enter image description here

答案 1 :(得分:1)

我认为这应该为您工作:
/[ ]*(?<![\d][ \*])\| | \|$/gm

Demo(确保打开演示页面底部的“ Substitution”手风琴以查看输出)

$re = '/[ ]*(?<![\d][ \*])\| | \|$/m';
$str = '3150779 | 3674-4 | Water Supply Plan
3637730 |
 | 10903-155 | Layout 10903 DWG 155 29 M | 
| 10903-155 | | Water Supply |';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

// Print the entire match result
var_dump($matches);

输出:

3150779 | 3674-4 | Water Supply Plan
3637730
10903-155 | Layout 10903 DWG 155 29 M
10903-155 |Water Supply