我有一个包含各种数据的字符串ArrayList。它充满了数字,十进制数字,简单字符串等等(但所有这些都存储为字符串)。
我的目标是创建一个正则表达式,它只匹配那些具有以下数据的字符串*,*(以逗号或简单整数分隔的浮点数):
"1"
"0"
"120000"
"1,23133"
"21312,9"
我的第二个目标是当找到类似这样的东西时,正则表达式将返回false:
"[82903] some_text"
"Release 12.5" //yes, it is separated by a dot
我正在尝试这种模式:
String pattern = "(\\d+(\\,\\d+)?)";
但在我的情况下,它无法正常工作。我正在尝试使用NumberFormat,但是当它看到“,”而不是“。”时会失败。
非常感谢您的帮助。
答案 0 :(得分:5)
您可以尝试以下模式,下面是我的样本测试:
public static void main(String[] args) {
String pattern = "([-+]?[0-9]*,?[0-9]+)";
String x = "1,23132";
System.out.println(x.matches(pattern));
}
答案 1 :(得分:2)
您可以尝试使用DecimalFormat
查看此代码:
DecimalFormat decimalFormat = new DecimalFormat();
DecimalFormatSymbols commaSeperateFormat = new DecimalFormatSymbols();
commaSeperateFormat.setDecimalSeparator(',');
decimalFormat.setDecimalFormatSymbols(commaSeperateFormat );
String[] testCases = {"1", "0", "120000", "1,23133", "21312,9"};
for (String t : testCases) {
Number parsedNumber = decimalFormat.parse(t);
float theFloatNumber = parsedNumber.floatValue();
System.out.println(theFloatNumber);
}
答案 2 :(得分:1)
您可以使用以下正则表达式(将其锚定到开头和结尾):
String pattern = "^(\\d+(?:,\\d+)?)$";
见a demo on regex101.com。如果数字可以出现在字符串中的任何位置,那么您也可以使用字边界和替换:
String pattern = "\\b(?:\\d+\\.\\d+|(\\d+(?:,\\d+)?))\\b";
使用此方法仅使用第一组中捕获的数字,请参阅demo here
答案 3 :(得分:0)
String pattern = "([0-9\\.,])+"
boolean matches = "12525.52,5252,4525.3d".matches(pattern)
答案 4 :(得分:0)
我猜你也想抓住这两个部分吧?你可以试试这个:
String pattern = "([+-]?\\d+)(?:,(\\d+))?"
答案 5 :(得分:0)
这将删除所有非数字字符,并确定它是带有逗号作为小数分隔符还是点作为它的文化小数
public static decimal RemoveAllNonNumericCharacters(this string input)
{
CultureInfo culture = new CultureInfo("en");
string regex = string.Empty;
if (input.Contains(",") && input.Contains("."))
{
if (input.IndexOf(".") > input.IndexOf(","))
{
culture.NumberFormat.NumberDecimalSeparator = ".";
regex = "[^-.0-9]";
}
else
{
culture.NumberFormat.NumberDecimalSeparator = ",";
regex = "[^-,0-9]";
}
}
else
{
if (input.Contains(",") && input.Split(',').Length == 2)
{
culture.NumberFormat.NumberDecimalSeparator = ",";
regex = "[^-,0-9]";
}
if (input.Contains(".") && input.Split('.').Length == 2)
{
culture.NumberFormat.NumberDecimalSeparator = ".";
regex = "[^-.0-9]";
}
}
return decimal.Parse(Regex.Replace(input, regex, string.Empty), culture);
}