热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java字符串替换标点符号_关于Java:如何使用正则表达式从字符串中删除外部标点符号...

给定如下所示的字符串,请通过正则表达式删除所有前导和尾随的标点符号:Stringa!?Dont.;,.:delete!the$actualstring

给定如下所示的字符串,请通过正则表达式删除所有前导和尾随的标点符号:

String a ="!?Don't.;, .:delete !the@ $actual string%";

String b ="Hyphenated-words, too!";

我知道正则表达式[ P {Alnum}]会以所有非字母数字字符为目标,但是我怎么只以前导和尾随标点为目标,所以我得到了...

a ="Don't delete the actual string";

b ="Hyphenated-words too";

... 代替:

a ="Dont delete the actual string";

b ="Hyphenated words too";

我只需要正则表达式; 不是删除标点符号的实际代码。

当您说"前导和尾随"时,这是否意味着结果应为Dont.;, .:delete !the@ $actual string? 例如,@的"前导"或"尾随"是什么,不适用于Dont中的? 而且,顺便说一句,要求使用正则表达式就是要求代码。 不要那样做。

@RealSkeptic我指的是字符串中每个单词的"前导" /"尾随"标点,而不必是字符串本身。 我没有明确指出我正在使用扫描仪定界符(这就是为什么我只需要正则表达式而不是整个代码本身的原因)。 至于您的最后评论,我不知道要求正则表达式就是要求代码。 我事先道歉

您想得到什么结果a ="不删除实际字符串"; b ="连字符的单词也"; 或这="不删除实际字符串";或者 b ="带连字符的单词";

@ J.Adder根据slns的评论,我已经更新了答案,现在使用\p{Punct}。

您要匹配与a)空格字符或b)开头或结尾相邻的标点符号。

您的模式前面加上(?<&#61;^|\s)正向后看&#xff0c;或者

您的模式&#xff0c;后跟(?&#61;\s|$)正向

为了缩短模式&#xff0c;我们可以改写一些措辞&#xff0c;以使我们的标点符号必须要么a)之前没有空白的字符&#xff0c;要么b)后面没有空白的字符。

您的模式前面加上(?否定性回溯&#xff0c;或者

您的模式&#xff0c;后跟(?!\S)负前瞻

最后一点&#xff0c;您应该使用\p{Punct}而不是[\P{Alnum}]来匹配标点符号。有关详细信息&#xff0c;请参见sln的评论。

这是一个示例用法&#xff1a;

String a &#61;"!?Don&#39;t.;, .:delete !the&#64; $actual string%";

String b &#61;"Hyphenated-words, too!";

String regex &#61;"(?:(?

System.out.println(a.replaceAll(regex,""));

System.out.println(b.replaceAll(regex,""));

输出&#xff1a;

Don&#39;t delete the actual string

Hyphenated-words too

这仍然是一件小事&#xff0c;例如"连字号"也是如此&#xff01;我相信你能做到

&#64;YCF_L输入"连字符---单词&#xff01;"所需的输出是什么&#xff1f;我的理解是" ---"不是单词的前导或结尾&#xff0c;而是单词的中间&#xff0c;因此应保持不变。还考虑" Mac-Dougal"。请做得更好&#xff0c;解释您想要什么。

啊&#xff0c;好吧&#xff0c;这是我的坏事&#xff0c;您好&#xff0c;我的投票给我带来了好运;)

这是一个不完整的解决方案。 \P{Alnum}也覆盖所有空白&#xff0c;从而有效地去除了所有格式和其他标点符号不完整的Unicode代码点。如果要使用此方法&#xff0c;请至少排除空格(?:(?

&#64;sln好点。我一直以OP的假设为前提&#xff0c;他想使用[\P{Alnum}]&#xff0c;但经过仔细检查&#xff0c;这是一个可怕的假设。

punct和alnum(ctrl除外)之后可能剩余的很少。

也可以通过使用空白边界来利用它。

找&#xff1a;

原始(?

字符串"(?

替换"$1"

讲解

(?

(?:                                   # Cluster

\p{punct}*                            # Optional punct

(                                     # (1 start), words to be written back

\p{alnum}&#43;                            # Required, start with alnum

(?: \p{punct}? \p{alnum} )*           # Optional punct &#43; alnum

)                                     # (1 end)

\p{punct}*                            # Optional punct

|                                      # or,

\p{punct}&#43;                            # Required punct

)                                     # End Cluster

(?! \S )                              # Whitespace boundary

之前瞄准

!?Don&#39;t.;, .:delete !the&#64; ()*& $actual string%

Hyphenated-words,  a)

更换后目标

Don&#39;t delete the  actual string

Hyphenated-words  a

注意&#xff1a;由于OP希望将正则表达式用作"扫描仪分隔符"&#xff0c;因此他将无法直接利用涉及$1或类似内容的任何答案。

您可以使用以下正则表达式&#xff1a;

(?:[^\w\s]*)(\S*?)[^\w\s]*(?&#61;\s|$)

并由

$ 1

对于您的样本输入&#xff0c;输出为&#xff1a;

Don&#39;t delete the actual string

Hyphenated-words too

注意&#xff1a;我使用过\w&#xff0c;但是如果需要更精确的字母数字定义&#xff0c;请用\p{Alnum}替换两个\w。

您可以使用^和$。 ^匹配字符串的开头&#xff0c;$结尾。正则表达式^\W*应与开头的所有非字母数字字符匹配&#xff0c;并与结尾的\W*$匹配。您可以简单地将这些正则表达式替换为空字符串以摆脱非字母数字字符。显然&#xff0c;您必须对Java字符串中的\进行转义(假设您正在使用Java)。



推荐阅读
  • 正则表达式及其范例
    为什么80%的码农都做不了架构师?一、前言部分控制台输入的字符串,编译成java字符串之后才送进内存,比如控制台打\, ... [详细]
  • Ihavebeenworkingwithbufferingafileonmylocaldrivetoparseandobtaincertaindata.Forte ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 本文介绍了在Java中检查字符串是否仅包含数字的方法,包括使用正则表达式的示例代码,并提供了测试案例进行验证。同时还解释了Java中的字符转义序列的使用。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • Python中的PyInputPlus模块原文:https ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • OO第一单元自白:简单多项式导函数的设计与bug分析
    本文介绍了作者在学习OO的第一次作业中所遇到的问题及其解决方案。作者通过建立Multinomial和Monomial两个类来实现多项式和单项式,并通过append方法将单项式组合为多项式,并在此过程中合并同类项。作者还介绍了单项式和多项式的求导方法,并解释了如何利用正则表达式提取各个单项式并进行求导。同时,作者还对自己在输入合法性判断上的不足进行了bug分析,指出了自己在处理指数情况时出现的问题,并总结了被hack的原因。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
author-avatar
guanchunlei
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有