正则表达式不是我最强的观点。假设我需要一个字符串的自定义解析器,它可以删除任何字母和多个小数点和字母表的字符串。
例如,输入字符串为“--1-2.3-gf5.47”,解析器将返回 “-12.3547”。 我只想出各种变化:
string.replaceAll("[^(\\-?)(\\.?)(\\d+)]", "")
删除字母但保留其他所有内容。有什么指针吗?
更多例子: 输入:-34.le.78-90 输出:-34.7890
输入:df56hfp.78 产量:56.78
一些规则:
答案 0 :(得分:1)
刚刚在ideone上测试了它,它似乎工作。评论应该很好地解释代码。您可以将其复制/粘贴到Ideone.com中,如果您愿意,可以对其进行测试。
也许有可能为它编写一个正则表达式模式,但是你可能更好地实现更简单/更可读的东西,如下所示。
你给出的三个例子打印出来:
--1-2.3-gf5.47 -> -12.3547
-34.le.78-90 -> -34.7890
df56hfp.78 -> 56.78
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
System.out.println(strip_and_parse("--1-2.3-gf5.47"));
System.out.println(strip_and_parse("-34.le.78-90"));
System.out.println(strip_and_parse("df56hfp.78"));
}
public static String strip_and_parse(String input)
{
//remove anything not a period or digit (including hyphens) for output string
String output = input.replaceAll("[^\\.\\d]", "");
//add a hyphen to the beginning of 'out' if the original string started with one
if (input.startsWith("-"))
{
output = "-" + output;
}
//if the string contains a decimal point, remove all but the first one by splitting
//the output string into two strings and removing all the decimal points from the
//second half
if (output.indexOf(".") != -1)
{
output = output.substring(0, output.indexOf(".") + 1)
+ output.substring(output.indexOf(".") + 1, output.length()).replaceAll("[^\\d]", "");
}
return output;
}
}
答案 1 :(得分:0)
就正则表达式而言,二级,三级等小数似乎难以删除。但是,这个应删除其他短划线和alpha:(?<=.)-|[a-zA-Z]
。 (希望Java中的语法相同;这是一个Python正则表达式,但我的理解是语言相对统一)。
话虽这么说,似乎你可以运行一个非常简短的有限状态机&#34;类型的代码来扫描字符串并自己重建减少的字符串:
a = "--1-2.3-gf5.47"
new_a = ""
dash = False
dot = False
nums = '0123456789'
for char in a:
if char in nums:
new_a = new_a + char # record a match to nums
dash = True # since we saw a number first, turn on the dash flag, we won't use any dashes from now on
elif char == '-' and not dash:
new_a = new_a + char # if we see a dash and haven't seen anything else yet, we append it
dash = True # activate the flag
elif char == '.' and not dot:
new_a = new_a + char # take the first dot
dot = True # put up the dot flag
(再次,抱歉语法,我认为你需要一些关于语句的补充说明而不是Python的缩进样式)