当前位置: 首页 > 知识库问答 >
问题:

使用正则表达式“清理”字符串

祁兴运
2023-03-14

我需要一个只有文字的明文,不包括所有数字、额外空格、破折号、逗号、点、括号等。它用于文字生成算法(取自gamasutra)。我想正则表达式在这里会有所帮助。我如何在String.split的帮助下做到这一点?

UPD:

输入:我有1337这样一个字符串,其中包含不同的内容:逗号、许多空格、数字-2 3 4、破折号。如何删除所有内容?

输出:我有这样一个字符串,里面有不同的东西,逗号,很多空格,数字,破折号,我怎么能删除所有的东西

共有3个答案

黄浩涆
2023-03-14

我也会这么做

    str = str.replaceAll("\\s+", " ");
    str = str.replaceAll("\\p{Punct}|\\d", "");
    String[] words = str.split(" ");
宓毅庵
2023-03-14

如果您关心Unicode(您应该),那么请使用Unicode属性。

String[] result = s.split("\\P{L}+");

是任何语言中字母的Unicode属性。

\P{L}\p{L}的否定,表示它将匹配所有不是字母的内容。(我明白这就是你想要的。)

阳英朗
2023-03-14

您可以通过两个步骤完成:

String s = "asd asd   asd.asd, asd";
String clean = s.replaceAll("[\\d[^\\w\\s]]+", " ").replaceAll("(\\s{2,})", " ");
System.out.println(clean);

第一步删除所有不是字母或空格的字符,并用空格替换它们。第二步仅用一个空格删除多个空格。

输出:

asd asd asd asd asd asd

如果您只需要一个包含单词的数组,那么这就足够了:

String[] words = s.trim().split("[\\W\\d]+");
 类似资料:
  • 主要内容:实例下表包含了元字符的完整列表以及它们在正则表达式上下文中的行为: 字符 描述 \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。 ^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或

  • 我不熟悉Javascript和正则表达式,所以我一直在研究如何使路由匹配所有以

  • 我有一个包含数千行的文本文件。这里有一个例子 我试图提取'nt60'、'nt50'末尾的字符串。 问题是会包含行尾字符() 我想使用正则表达式搜索来匹配从 (') 开始的字符串,但我不知道我应该用什么来匹配 。 有人能帮忙吗?

  • 我在一个多语言网站上工作,并已选择使用每种语言的自定义URL,例如: 两者都指向城市控制员的指数方法。 在每个页面上都有一个切换语言的选项,它会在我的路由中查找以匹配控制器、视图和语言。 因此,如果我在荷兰语页面上,它会找到英文版的正确网址,即“城市”而不是“steden”。 在我开始使用更复杂的正则表达式之前,一切都很好。 我有这些正则表达式,它们将匹配我所需的URL: 在我的代码中,我可以访问

  • 问题内容: 我有日期主要集中在形式和。我想模式匹配。 为此目的编写正则表达式很简单吗?我是regex的新手,所以不胜感激任何资源达标可以使我快速入门吗? 问题答案: 如果您试图在字符串中查找这些日期符号,那么正则表达式确实是一个不错的选择。您可以使用此正则表达式: 在此处查看实际操作:http : //rubular.com/r/qZOTsUikbo。注意:这也匹配“ 日期 ” 。如果这对您来说是

  • 问题内容: 我有这串 并且我需要提取这3个子字符串 1234 06:30 07:45 如果我使用此正则表达式\\ d {2} \:\\ d {2}我只能提取第一个小时的06:30 matcher.group(1)引发异常。 另外我也不知道如何提取1234。此字符串可以更改,但总是在’XX〜’之后 。您对如何将这些字符串与正则表达式匹配有任何想法吗? 更新 多亏了亚当的建议,我现在有了这个正则表达式